+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>AudioInput</ProjectName><Created>30-Sep-2008 14:03:00</Created><LastEdit>30-Sep-2008 14:03:28</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>AudioInput.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\</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>AudioInput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioInput.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>AudioInput.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\Demos\AudioInput\AudioInput.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the AudioInput demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "AudioInput.h"\r
-\r
-/** LUFA Audio Class driver interface configuration and state information. This structure is\r
- * passed to all Audio Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_Audio_t Microphone_Audio_Interface =\r
- {\r
- .StreamingInterfaceNumber = 1,\r
-\r
- .DataINEndpointNumber = AUDIO_STREAM_EPNUM,\r
- .DataINEndpointSize = AUDIO_STREAM_EPSIZE,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- for (;;)\r
- {\r
- if (Microphone_Audio_Interface.InterfaceEnabled)\r
- ProcessNextSample();\r
-\r
- USB_Audio_USBTask(&Microphone_Audio_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
- \r
- /* Hardware Initialization */\r
- LEDs_Init();\r
- USB_Init();\r
- ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
- ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
- \r
- /* Start the ADC conversion in free running mode */\r
- ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
-}\r
-\r
-/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
- * interface, each time the sample reload timer period elapses to give a constant sample rate.\r
- */\r
-void ProcessNextSample(void)\r
-{\r
- if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsReadyForNextSample(&Microphone_Audio_Interface))\r
- {\r
- TIFR0 |= (1 << OCF0A);\r
-\r
- /* Audio sample is ADC value scaled to fit the entire range */\r
- int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());\r
- \r
-#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)\r
- /* Microphone is biased to half rail voltage, subtract the bias from the sample value */\r
- AudioSample -= (SAMPLE_MAX_RANGE / 2));\r
-#endif\r
-\r
- USB_Audio_WriteSample16(AudioSample);\r
- }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-\r
- /* Sample reload timer initialization */\r
- OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
- TCCR0A = (1 << WGM01); // CTC mode\r
- TCCR0B = (1 << CS00); // Fcpu speed\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- /* Stop the sample reload timer */\r
- TCCR0B = 0;\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
- \r
- if (!(USB_Audio_ConfigureEndpoints(&Microphone_Audio_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_Audio_ProcessControlPacket(&Microphone_Audio_Interface);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for AudioInput.c.\r
- */\r
- \r
-#ifndef _AUDIO_INPUT_H_\r
-#define _AUDIO_INPUT_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
-\r
- #include "Descriptors.h"\r
- \r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Peripheral/ADC.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
- \r
- /* Macros: */\r
- /** ADC channel number for the microphone input. */\r
- #define MIC_IN_ADC_CHANNEL 2\r
- \r
- /** Maximum ADC sample value for the microphone input. */\r
- #define SAMPLE_MAX_RANGE 0xFFFF\r
-\r
- /** Maximum ADC range for the microphone input. */\r
- #define ADC_MAX_RANGE 0x3FF\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
- void ProcessNextSample(void);\r
- \r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Audio Input Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Audio Class</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Standard Audio Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF Audio Class Specification</td>\r
- * <td>USBIF Audio Class Terminal Types Specification</td>\r
- * <td>USBIF Audio Data Formats Specification</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Audio demonstration application. This gives a simple reference\r
- * application for implementing a USB Audio Input device using the\r
- * basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
- * required).\r
- * \r
- * On start-up the system will automatically enumerate and function\r
- * as a USB microphone. Incoming audio from the ADC channel 1 will\r
- * be sampled and sent to the host computer.\r
- * \r
- * To use, connect a microphone to the ADC channel 2.\r
- * \r
- * Under Windows, if a driver request dialogue pops up, select the option\r
- * to automatically install the appropriate drivers.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>AUDIO_SAMPLE_FREQUENCY</td>\r
- * <td>Descriptors.h</td>\r
- * <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
- \r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(02.00),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2047,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
-\r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .AudioControlInterface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 0,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x01,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR \r
- },\r
- \r
- .AudioControlInterface_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_Header,\r
- \r
- .ACSpecification = VERSION_BCD(01.00),\r
- .TotalLength = (sizeof(USB_AudioInterface_AC_t) +\r
- sizeof(USB_AudioInputTerminal_t) +\r
- sizeof(USB_AudioOutputTerminal_t)),\r
- \r
- .InCollection = 1,\r
- .InterfaceNumbers = {1}, \r
- },\r
-\r
- .InputTerminal = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_InputTerminal,\r
- \r
- .TerminalID = 0x01,\r
- .TerminalType = TERMINAL_IN_MIC,\r
- .AssociatedOutputTerminal = 0x00,\r
- \r
- .TotalChannels = 1,\r
- .ChannelConfig = 0,\r
- \r
- .ChannelStrIndex = NO_DESCRIPTOR,\r
- .TerminalStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .OutputTerminal = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_OutputTerminal,\r
- \r
- .TerminalID = 0x02,\r
- .TerminalType = TERMINAL_STREAMING,\r
- .AssociatedInputTerminal = 0x00,\r
- \r
- .SourceID = 0x01,\r
- \r
- .TerminalStrIndex = NO_DESCRIPTOR \r
- },\r
-\r
- .AudioStreamInterface_Alt0 = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 0,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x02,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .AudioStreamInterface_Alt1 = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 1,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x02,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
- \r
- .AudioStreamInterface_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_General,\r
- \r
- .TerminalLink = 0x02,\r
- \r
- .FrameDelay = 1,\r
- .AudioFormat = 0x0001\r
- },\r
- \r
- .AudioFormat = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_Format,\r
-\r
- .FormatType = 0x01,\r
- .Channels = 0x01,\r
- \r
- .SubFrameSize = 0x02,\r
- .BitResolution = 16,\r
- .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),\r
- \r
- .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
- },\r
- \r
- .AudioEndpoint = \r
- {\r
- .Endpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),\r
- .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
- .EndpointSize = AUDIO_STREAM_EPSIZE,\r
- .PollingIntervalMS = 1\r
- },\r
- \r
- .Refresh = 0,\r
- .SyncEndpointNumber = 0\r
- },\r
- \r
- .AudioEndpoint_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
- .Subtype = DSUBTYPE_General,\r
- \r
- .Attributes = 0x00,\r
- \r
- .LockDelayUnits = 0x00,\r
- .LockDelay = 0x0000\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Audio In Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
-\r
- #include <avr/pgmspace.h>\r
-\r
- /* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
- /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
- #define AUDIO_STREAM_EPNUM 1\r
- #else\r
- #define AUDIO_STREAM_EPNUM 3 \r
- #endif\r
- \r
- /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
- * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
- * USB AVR models will result in unavoidable distorted output.\r
- */\r
- #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
- \r
- /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
- #define AUDIO_SAMPLE_FREQUENCY 48000\r
- \r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t AudioControlInterface;\r
- USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
- USB_AudioInputTerminal_t InputTerminal;\r
- USB_AudioOutputTerminal_t OutputTerminal;\r
- USB_Descriptor_Interface_t AudioStreamInterface_Alt0;\r
- USB_Descriptor_Interface_t AudioStreamInterface_Alt1;\r
- USB_AudioInterface_AS_t AudioStreamInterface_SPC;\r
- USB_AudioFormat_t AudioFormat;\r
- USB_AudioStreamEndpoint_Std_t AudioEndpoint;\r
- USB_AudioStreamEndpoint_Spc_t AudioEndpoint_SPC;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Audio Input Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = AudioInput\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>AudioOutput</ProjectName><Created>30-Sep-2008 14:03:51</Created><LastEdit>30-Sep-2008 14:04:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:51</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\Demos\AudioOutput\</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>AudioOutput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioOutput.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>AudioOutput.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the AudioOutput demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "AudioOutput.h"\r
-\r
-/** LUFA Audio Class driver interface configuration and state information. This structure is\r
- * passed to all Audio Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_Audio_t Speaker_Audio_Interface =\r
- {\r
- .StreamingInterfaceNumber = 1,\r
-\r
- .DataOUTEndpointNumber = AUDIO_STREAM_EPNUM,\r
- .DataOUTEndpointSize = AUDIO_STREAM_EPSIZE,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- for (;;)\r
- {\r
- if (Speaker_Audio_Interface.InterfaceEnabled)\r
- ProcessNextSample();\r
-\r
- USB_Audio_USBTask(&Speaker_Audio_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- LEDs_Init();\r
- USB_Init();\r
-}\r
-\r
-/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
- * interface, each time the sample reload timer period elapses to give a constant sample rate.\r
- */\r
-void ProcessNextSample(void)\r
-{\r
- if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsSampleReceived(&Speaker_Audio_Interface))\r
- {\r
- /* Clear the sample reload timer */\r
- TIFR0 |= (1 << OCF0A);\r
-\r
- /* Retrieve the signed 16-bit left and right audio samples */\r
- int16_t LeftSample_16Bit = (int16_t)USB_Audio_ReadSample16();\r
- int16_t RightSample_16Bit = (int16_t)USB_Audio_ReadSample16();\r
-\r
- /* Massage signed 16-bit left and right audio samples into signed 8-bit */\r
- int8_t LeftSample_8Bit = (LeftSample_16Bit >> 8);\r
- int8_t RightSample_8Bit = (RightSample_16Bit >> 8);\r
- \r
- /* Mix the two channels together to produce a mono, 8-bit sample */\r
- int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
-\r
-#if defined(AUDIO_OUT_MONO)\r
- /* Load the sample into the PWM timer channel */\r
- OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));\r
-#elif defined(AUDIO_OUT_STEREO)\r
- /* Load the dual 8-bit samples into the PWM timer channels */\r
- OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7));\r
- OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));\r
-#elif defined(AUDIO_OUT_PORTC)\r
- PORTC = MixedSample_8Bit;\r
-#else\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
-\r
- /* Make mixed sample value positive (absolute) */\r
- if (MixedSample_8Bit < 0)\r
- MixedSample_8Bit = -MixedSample_8Bit;\r
-\r
- if (MixedSample_8Bit > ((128 / 8) * 1))\r
- LEDMask |= LEDS_LED1;\r
- \r
- if (MixedSample_8Bit > ((128 / 8) * 2))\r
- LEDMask |= LEDS_LED2;\r
- \r
- if (MixedSample_8Bit > ((128 / 8) * 3))\r
- LEDMask |= LEDS_LED3;\r
-\r
- if (MixedSample_8Bit > ((128 / 8) * 4))\r
- LEDMask |= LEDS_LED4;\r
-\r
- LEDs_SetAllLEDs(LEDMask);\r
-#endif\r
- }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
- \r
- /* Sample reload timer initialization */\r
- OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
- TCCR0A = (1 << WGM01); // CTC mode\r
- TCCR0B = (1 << CS00); // Fcpu speed\r
-\r
-#if defined(AUDIO_OUT_MONO)\r
- /* Set speaker as output */\r
- DDRC |= (1 << 6);\r
-#elif defined(AUDIO_OUT_STEREO)\r
- /* Set speakers as outputs */\r
- DDRC |= ((1 << 6) | (1 << 5));\r
-#elif defined(AUDIO_OUT_PORTC)\r
- /* Set PORTC as outputs */\r
- DDRC |= 0xFF;\r
-#endif\r
-\r
-#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
- /* PWM speaker timer initialization */\r
- TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)\r
- | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP\r
- TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed\r
-#endif \r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- /* Stop the sample reload timer */\r
- TCCR0B = 0;\r
-\r
-#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
- /* Stop the PWM generation timer */\r
- TCCRxB = 0;\r
-#endif \r
-\r
-#if defined(AUDIO_OUT_MONO)\r
- /* Set speaker as input to reduce current draw */\r
- DDRC &= ~(1 << 6);\r
-#elif defined(AUDIO_OUT_STEREO)\r
- /* Set speakers as inputs to reduce current draw */\r
- DDRC &= ~((1 << 6) | (1 << 5));\r
-#elif defined(AUDIO_OUT_PORTC)\r
- /* Set PORTC low */\r
- PORTC = 0x00;\r
-#endif\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
- \r
- if (!(USB_Audio_ConfigureEndpoints(&Speaker_Audio_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_Audio_ProcessControlPacket(&Speaker_Audio_Interface);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for AudioOutput.c.\r
- */\r
-\r
-#ifndef _AUDIO_OUTPUT_H_\r
-#define _AUDIO_OUTPUT_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
-\r
- #include "Descriptors.h"\r
- \r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Peripheral/ADC.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
- \r
- /* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
- #define TCCRxA TCCR3A\r
- #define TCCRxB TCCR3B\r
- #define OCRxA OCR3A\r
- #define OCRxB OCR3B\r
- #define WGMx0 WGM30\r
- #define WGMx2 WGM32\r
- #define COMxA1 COM3A1\r
- #define COMxA0 COM3A0\r
- #define COMxB1 COM3B1\r
- #define COMxB0 COM3B0\r
- #define CSx0 CS30\r
- #else\r
- /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */\r
- #define TCCRxA TCCR1A\r
-\r
- /** Timer count register used for right channel PWM audio output */\r
- #define TCCRxB TCCR1B\r
-\r
- /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */\r
- #define OCRxA OCR1A\r
-\r
- /** Timer compare register used for right channel PWM audio output */\r
- #define OCRxB OCR1B\r
-\r
- /** Timer control register mask used to select PWM mode */\r
- #define WGMx0 WGM10\r
-\r
- /** Timer control register mask used to select PWM mode */\r
- #define WGMx2 WGM12\r
-\r
- /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
- #define COMxA1 COM1A1\r
-\r
- /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
- #define COMxA0 COM1A0\r
-\r
- /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
- #define COMxB1 COM1B1\r
-\r
- /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
- #define COMxB0 COM1B0\r
-\r
- /** Timer control register mask used to start the timer at Fcpu clock rate */\r
- #define CSx0 CS10\r
- #endif\r
- \r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
- void ProcessNextSample(void);\r
- \r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Audio Output Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Audio Class</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Standard Audio Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF Audio Class Specification</td>\r
- * <td>USBIF Audio Class Terminal Types Specification</td>\r
- * <td>USBIF Audio Data Formats Specification</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Audio demonstration application. This gives a simple reference\r
- * application for implementing a USB Audio Output device using the\r
- * basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
- * required).\r
- * \r
- * On start-up the system will automatically enumerate and function\r
- * as a USB speaker. Incoming audio will output in 8-bit PWM onto\r
- * the timer output (timer 3 for the AT90USBXXX6/7 USB AVRs, timer 1 for\r
- * the AT90USBXXX2 controller AVRs) compare channel A for AUDIO_OUT_MONO\r
- * mode, on channels A and B for AUDIO_OUT_STEREO and on the board LEDs\r
- * for AUDIO_OUT_LEDS mode. Decouple audio outputs with a capacitor and\r
- * attach to a speaker to hear the audio.\r
- * \r
- * Under Windows, if a driver request dialogue pops up, select the option\r
- * to automatically install the appropriate drivers.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>AUDIO_OUT_STEREO</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>AUDIO_OUT_MONO</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>AUDIO_OUT_LEDS</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this outputs the audio samples in stereo to the board LEDs.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>AUDIO_OUT_PORTC</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an\r
- * external DAC.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>AUDIO_SAMPLE_FREQUENCY</td>\r
- * <td>Descriptors.h</td>\r
- * <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
- \r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(02.00),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2046,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
-\r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .AudioControlInterface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 0,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x01,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR \r
- },\r
- \r
- .AudioControlInterface_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_Header,\r
- \r
- .ACSpecification = VERSION_BCD(01.00),\r
- .TotalLength = (sizeof(USB_AudioInterface_AC_t) +\r
- sizeof(USB_AudioInputTerminal_t) +\r
- sizeof(USB_AudioOutputTerminal_t)),\r
- \r
- .InCollection = 1,\r
- .InterfaceNumbers = {1}, \r
- },\r
-\r
- .InputTerminal = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_InputTerminal,\r
- \r
- .TerminalID = 0x01,\r
- .TerminalType = TERMINAL_STREAMING,\r
- .AssociatedOutputTerminal = 0x00,\r
- \r
- .TotalChannels = 2,\r
- .ChannelConfig = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT),\r
- \r
- .ChannelStrIndex = NO_DESCRIPTOR,\r
- .TerminalStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .OutputTerminal = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_OutputTerminal,\r
- \r
- .TerminalID = 0x02,\r
- .TerminalType = TERMINAL_OUT_SPEAKER,\r
- .AssociatedInputTerminal = 0x00,\r
- \r
- .SourceID = 0x01,\r
- \r
- .TerminalStrIndex = NO_DESCRIPTOR \r
- },\r
-\r
- .AudioStreamInterface_Alt0 = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 0,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x02,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .AudioStreamInterface_Alt1 = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 1,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x02,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
- \r
- .AudioStreamInterface_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_General,\r
- \r
- .TerminalLink = 0x01,\r
- \r
- .FrameDelay = 1,\r
- .AudioFormat = 0x0001\r
- },\r
- \r
- .AudioFormat = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_Format,\r
-\r
- .FormatType = 0x01,\r
- .Channels = 0x02,\r
- \r
- .SubFrameSize = 0x02,\r
- .BitResolution = 16,\r
-\r
- .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)), \r
- .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
- },\r
- \r
- .AudioEndpoint = \r
- {\r
- .Endpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | AUDIO_STREAM_EPNUM),\r
- .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
- .EndpointSize = AUDIO_STREAM_EPSIZE,\r
- .PollingIntervalMS = 1\r
- },\r
- \r
- .Refresh = 0,\r
- .SyncEndpointNumber = 0\r
- },\r
- \r
- .AudioEndpoint_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
- .Subtype = DSUBTYPE_General,\r
- \r
- .Attributes = EP_ACCEPTS_SMALL_PACKETS,\r
- \r
- .LockDelayUnits = 0x00,\r
- .LockDelay = 0x0000\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Audio Out Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration:\r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00:\r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
-\r
- #include <avr/pgmspace.h>\r
-\r
- /* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
- /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
- #define AUDIO_STREAM_EPNUM 1\r
- #else\r
- #define AUDIO_STREAM_EPNUM 3 \r
- #endif\r
- \r
- /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
- * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
- * USB AVR models will result in unavoidable distorted output.\r
- */\r
- #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
- \r
- /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
- #define AUDIO_SAMPLE_FREQUENCY 48000\r
- \r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t AudioControlInterface;\r
- USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
- USB_AudioInputTerminal_t InputTerminal;\r
- USB_AudioOutputTerminal_t OutputTerminal;\r
- USB_Descriptor_Interface_t AudioStreamInterface_Alt0;\r
- USB_Descriptor_Interface_t AudioStreamInterface_Alt1;\r
- USB_AudioInterface_AS_t AudioStreamInterface_SPC;\r
- USB_AudioFormat_t AudioFormat;\r
- USB_AudioStreamEndpoint_Std_t AudioEndpoint;\r
- USB_AudioStreamEndpoint_Spc_t AudioEndpoint_SPC;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Audio Output Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = YES\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = AudioOutput\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-CDEFS += -DAUDIO_OUT_MONO\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>CDC</ProjectName><Created>30-Sep-2008 14:04:34</Created><LastEdit>30-Sep-2008 14:04:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:04:34</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\Demos\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>CDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>CDC.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>CDC.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the CDC demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
- \r
-#include "CDC.h"\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- * passed to all CDC Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
- {\r
- .ControlInterfaceNumber = 0,\r
-\r
- .DataINEndpointNumber = CDC_TX_EPNUM,\r
- .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = CDC_RX_EPNUM,\r
- .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
- .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
- \r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- for (;;)\r
- {\r
- CheckJoystickMovement();\r
- \r
- uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface);\r
- while (BytesToDiscard--)\r
- USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface);\r
-\r
- USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- USB_Init();\r
-}\r
-\r
-/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */\r
-void CheckJoystickMovement(void)\r
-{\r
- uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
- char* ReportString = NULL;\r
- static bool ActionSent = false;\r
- \r
- char* JoystickStrings[] =\r
- {\r
- "Joystick Up\r\n",\r
- "Joystick Down\r\n",\r
- "Joystick Left\r\n",\r
- "Joystick Right\r\n",\r
- "Joystick Pressed\r\n",\r
- };\r
-\r
- if (JoyStatus_LCL & JOY_UP)\r
- ReportString = JoystickStrings[0];\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- ReportString = JoystickStrings[1];\r
- else if (JoyStatus_LCL & JOY_LEFT)\r
- ReportString = JoystickStrings[2];\r
- else if (JoyStatus_LCL & JOY_RIGHT)\r
- ReportString = JoystickStrings[3];\r
- else if (JoyStatus_LCL & JOY_PRESS)\r
- ReportString = JoystickStrings[4];\r
- else\r
- ActionSent = false;\r
- \r
- if ((ReportString != NULL) && (ActionSent == false))\r
- {\r
- ActionSent = true;\r
- \r
- USB_CDC_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString)); \r
- }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for CDC.c.\r
- */\r
-\r
-#ifndef _CDC_H_\r
-#define _CDC_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
- #include <string.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
- void CheckJoystickMovement(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Communications Device Class Device (Virtual Serial Port)\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Communications Device Class (CDC)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Abstract Control Model (ACM)</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF CDC Class Standard</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Communications Device Class demonstration application.\r
- * This gives a simple reference application for implementing\r
- * a CDC device acting as a virtual serial port. Joystick\r
- * actions are transmitted to the host as strings. The device\r
- * does not respond to serial data sent from the host.\r
- * \r
- * After running this demo for the first time on a new computer,\r
- * you will need to supply the .INF file located in this demo\r
- * project's directory as the device's driver when running under\r
- * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
- * negating the need for custom drivers for the device. Other\r
- * Operating Systems should automatically use their own inbuilt\r
- * CDC-ACM drivers.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x02,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2044,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .CCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC_Functional_IntHeader = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x00,\r
- \r
- .Data = {0x01, 0x10}\r
- },\r
-\r
- .CDC_Functional_CallManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x01,\r
- \r
- .Data = {0x03, 0x01}\r
- },\r
-\r
- .CDC_Functional_AbstractControlManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
- .SubType = 0x02,\r
- \r
- .Data = {0x06}\r
- },\r
- \r
- .CDC_Functional_Union = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x06,\r
- \r
- .Data = {0x00, 0x01}\r
- },\r
-\r
- .ManagementEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- .PollingIntervalMS = 0xFF\r
- },\r
-\r
- .DCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x0A,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .DataOutEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
- \r
- .DataInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA CDC Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address; \r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
- /* Macros: */ \r
- /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
- #define CDC_NOTIFICATION_EPNUM 2\r
-\r
- /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
- #define CDC_TX_EPNUM 3 \r
-\r
- /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
- #define CDC_RX_EPNUM 4 \r
-\r
- /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
- #define CDC_NOTIFICATION_EPSIZE 8\r
-\r
- /** Size in bytes of the CDC data IN and OUT endpoints. */\r
- #define CDC_TXRX_EPSIZE 16 \r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t CCI_Interface;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
- USB_Descriptor_Endpoint_t ManagementEndpoint;\r
- USB_Descriptor_Interface_t DCI_Interface;\r
- USB_Descriptor_Endpoint_t DataOutEndpoint;\r
- USB_Descriptor_Endpoint_t DataInEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - CDC Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-; Windows LUFA CDC Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version] \r
-Signature="$Windows NT$" \r
-Class=Ports\r
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
-Provider=%COMPANY% \r
-LayoutFile=layout.inf\r
-DriverVer=06/06/2006,1.0.0.0\r
-\r
-[Manufacturer] \r
-%MFGNAME% = ManufName\r
-\r
-[DestinationDirs] \r
-DefaultDestDir=12 \r
-\r
-[ManufName] \r
-%Modem3% = Modem3, USB\VID_03EB&PID_2044\r
-\r
-;------------------------------------------------------------------------------\r
-; Windows 2000/XP Sections\r
-;------------------------------------------------------------------------------\r
-\r
-[Modem3.nt]\r
-CopyFiles=USBModemCopyFileSection\r
-AddReg=Modem3.nt.AddReg \r
-\r
-[USBModemCopyFileSection]\r
-usbser.sys,,,0x20\r
-\r
-[Modem3.nt.AddReg] \r
-HKR,,DevLoader,,*ntkern \r
-HKR,,NTMPDriver,,usbser.sys \r
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
-\r
-[Modem3.nt.Services] \r
-AddService=usbser, 0x00000002, DriverService\r
-\r
-[DriverService] \r
-DisplayName=%SERVICE%\r
-ServiceType=1\r
-StartType=3\r
-ErrorControl=1\r
-ServiceBinary=%12%\usbser.sys \r
-\r
-;------------------------------------------------------------------------------\r
-; String Definitions\r
-;------------------------------------------------------------------------------\r
-\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-MFGNAME="Dean Camera"\r
-Modem3="USB Virtual Serial Port" \r
-SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = CDC\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>AudioInput</ProjectName><Created>30-Sep-2008 14:03:00</Created><LastEdit>30-Sep-2008 14:03:28</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>AudioInput.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\</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>AudioInput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioInput.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>AudioInput.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\Demos\AudioInput\AudioInput.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the AudioInput demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "AudioInput.h"\r
+\r
+/** LUFA Audio Class driver interface configuration and state information. This structure is\r
+ * passed to all Audio Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_Audio_t Microphone_Audio_Interface =\r
+ {\r
+ .StreamingInterfaceNumber = 1,\r
+\r
+ .DataINEndpointNumber = AUDIO_STREAM_EPNUM,\r
+ .DataINEndpointSize = AUDIO_STREAM_EPSIZE,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ if (Microphone_Audio_Interface.InterfaceEnabled)\r
+ ProcessNextSample();\r
+\r
+ USB_Audio_USBTask(&Microphone_Audio_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+ \r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ USB_Init();\r
+ ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
+ ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
+ \r
+ /* Start the ADC conversion in free running mode */\r
+ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
+}\r
+\r
+/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
+ * interface, each time the sample reload timer period elapses to give a constant sample rate.\r
+ */\r
+void ProcessNextSample(void)\r
+{\r
+ if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsReadyForNextSample(&Microphone_Audio_Interface))\r
+ {\r
+ TIFR0 |= (1 << OCF0A);\r
+\r
+ /* Audio sample is ADC value scaled to fit the entire range */\r
+ int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());\r
+ \r
+#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)\r
+ /* Microphone is biased to half rail voltage, subtract the bias from the sample value */\r
+ AudioSample -= (SAMPLE_MAX_RANGE / 2));\r
+#endif\r
+\r
+ USB_Audio_WriteSample16(AudioSample);\r
+ }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+\r
+ /* Sample reload timer initialization */\r
+ OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+ TCCR0A = (1 << WGM01); // CTC mode\r
+ TCCR0B = (1 << CS00); // Fcpu speed\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop the sample reload timer */\r
+ TCCR0B = 0;\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ \r
+ if (!(USB_Audio_ConfigureEndpoints(&Microphone_Audio_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_Audio_ProcessControlPacket(&Microphone_Audio_Interface);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for AudioInput.c.\r
+ */\r
+ \r
+#ifndef _AUDIO_INPUT_H_\r
+#define _AUDIO_INPUT_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+ \r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Peripheral/ADC.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+ \r
+ /* Macros: */\r
+ /** ADC channel number for the microphone input. */\r
+ #define MIC_IN_ADC_CHANNEL 2\r
+ \r
+ /** Maximum ADC sample value for the microphone input. */\r
+ #define SAMPLE_MAX_RANGE 0xFFFF\r
+\r
+ /** Maximum ADC range for the microphone input. */\r
+ #define ADC_MAX_RANGE 0x3FF\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void ProcessNextSample(void);\r
+ \r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Audio Input Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Audio Class</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Standard Audio Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Audio Class Specification</td>\r
+ * <td>USBIF Audio Class Terminal Types Specification</td>\r
+ * <td>USBIF Audio Data Formats Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Audio demonstration application. This gives a simple reference\r
+ * application for implementing a USB Audio Input device using the\r
+ * basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ * required).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a USB microphone. Incoming audio from the ADC channel 1 will\r
+ * be sampled and sent to the host computer.\r
+ * \r
+ * To use, connect a microphone to the ADC channel 2.\r
+ * \r
+ * Under Windows, if a driver request dialogue pops up, select the option\r
+ * to automatically install the appropriate drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ * <td>Descriptors.h</td>\r
+ * <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(02.00),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2047,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+\r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .AudioControlInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR \r
+ },\r
+ \r
+ .AudioControlInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Header,\r
+ \r
+ .ACSpecification = VERSION_BCD(01.00),\r
+ .TotalLength = (sizeof(USB_AudioInterface_AC_t) +\r
+ sizeof(USB_AudioInputTerminal_t) +\r
+ sizeof(USB_AudioOutputTerminal_t)),\r
+ \r
+ .InCollection = 1,\r
+ .InterfaceNumbers = {1}, \r
+ },\r
+\r
+ .InputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputTerminal,\r
+ \r
+ .TerminalID = 0x01,\r
+ .TerminalType = TERMINAL_IN_MIC,\r
+ .AssociatedOutputTerminal = 0x00,\r
+ \r
+ .TotalChannels = 1,\r
+ .ChannelConfig = 0,\r
+ \r
+ .ChannelStrIndex = NO_DESCRIPTOR,\r
+ .TerminalStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .OutputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputTerminal,\r
+ \r
+ .TerminalID = 0x02,\r
+ .TerminalType = TERMINAL_STREAMING,\r
+ .AssociatedInputTerminal = 0x00,\r
+ \r
+ .SourceID = 0x01,\r
+ \r
+ .TerminalStrIndex = NO_DESCRIPTOR \r
+ },\r
+\r
+ .AudioStreamInterface_Alt0 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .AudioStreamInterface_Alt1 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 1,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .AudioStreamInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .TerminalLink = 0x02,\r
+ \r
+ .FrameDelay = 1,\r
+ .AudioFormat = 0x0001\r
+ },\r
+ \r
+ .AudioFormat = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Format,\r
+\r
+ .FormatType = 0x01,\r
+ .Channels = 0x01,\r
+ \r
+ .SubFrameSize = 0x02,\r
+ .BitResolution = 16,\r
+ .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),\r
+ \r
+ .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+ },\r
+ \r
+ .AudioEndpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),\r
+ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = AUDIO_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 1\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .AudioEndpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .Attributes = 0x00,\r
+ \r
+ .LockDelayUnits = 0x00,\r
+ .LockDelay = 0x0000\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Audio In Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+ #define AUDIO_STREAM_EPNUM 1\r
+ #else\r
+ #define AUDIO_STREAM_EPNUM 3 \r
+ #endif\r
+ \r
+ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+ * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+ * USB AVR models will result in unavoidable distorted output.\r
+ */\r
+ #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+ \r
+ /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+ #define AUDIO_SAMPLE_FREQUENCY 48000\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t AudioControlInterface;\r
+ USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
+ USB_AudioInputTerminal_t InputTerminal;\r
+ USB_AudioOutputTerminal_t OutputTerminal;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt0;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt1;\r
+ USB_AudioInterface_AS_t AudioStreamInterface_SPC;\r
+ USB_AudioFormat_t AudioFormat;\r
+ USB_AudioStreamEndpoint_Std_t AudioEndpoint;\r
+ USB_AudioStreamEndpoint_Spc_t AudioEndpoint_SPC;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Audio Input Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioInput\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>AudioOutput</ProjectName><Created>30-Sep-2008 14:03:51</Created><LastEdit>30-Sep-2008 14:04:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:51</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\Demos\AudioOutput\</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>AudioOutput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioOutput.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>AudioOutput.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the AudioOutput demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "AudioOutput.h"\r
+\r
+/** LUFA Audio Class driver interface configuration and state information. This structure is\r
+ * passed to all Audio Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_Audio_t Speaker_Audio_Interface =\r
+ {\r
+ .StreamingInterfaceNumber = 1,\r
+\r
+ .DataOUTEndpointNumber = AUDIO_STREAM_EPNUM,\r
+ .DataOUTEndpointSize = AUDIO_STREAM_EPSIZE,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ if (Speaker_Audio_Interface.InterfaceEnabled)\r
+ ProcessNextSample();\r
+\r
+ USB_Audio_USBTask(&Speaker_Audio_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ USB_Init();\r
+}\r
+\r
+/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
+ * interface, each time the sample reload timer period elapses to give a constant sample rate.\r
+ */\r
+void ProcessNextSample(void)\r
+{\r
+ if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsSampleReceived(&Speaker_Audio_Interface))\r
+ {\r
+ /* Clear the sample reload timer */\r
+ TIFR0 |= (1 << OCF0A);\r
+\r
+ /* Retrieve the signed 16-bit left and right audio samples */\r
+ int16_t LeftSample_16Bit = (int16_t)USB_Audio_ReadSample16();\r
+ int16_t RightSample_16Bit = (int16_t)USB_Audio_ReadSample16();\r
+\r
+ /* Massage signed 16-bit left and right audio samples into signed 8-bit */\r
+ int8_t LeftSample_8Bit = (LeftSample_16Bit >> 8);\r
+ int8_t RightSample_8Bit = (RightSample_16Bit >> 8);\r
+ \r
+ /* Mix the two channels together to produce a mono, 8-bit sample */\r
+ int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+ /* Load the sample into the PWM timer channel */\r
+ OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_STEREO)\r
+ /* Load the dual 8-bit samples into the PWM timer channels */\r
+ OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7));\r
+ OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+ PORTC = MixedSample_8Bit;\r
+#else\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+\r
+ /* Make mixed sample value positive (absolute) */\r
+ if (MixedSample_8Bit < 0)\r
+ MixedSample_8Bit = -MixedSample_8Bit;\r
+\r
+ if (MixedSample_8Bit > ((128 / 8) * 1))\r
+ LEDMask |= LEDS_LED1;\r
+ \r
+ if (MixedSample_8Bit > ((128 / 8) * 2))\r
+ LEDMask |= LEDS_LED2;\r
+ \r
+ if (MixedSample_8Bit > ((128 / 8) * 3))\r
+ LEDMask |= LEDS_LED3;\r
+\r
+ if (MixedSample_8Bit > ((128 / 8) * 4))\r
+ LEDMask |= LEDS_LED4;\r
+\r
+ LEDs_SetAllLEDs(LEDMask);\r
+#endif\r
+ }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+ \r
+ /* Sample reload timer initialization */\r
+ OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+ TCCR0A = (1 << WGM01); // CTC mode\r
+ TCCR0B = (1 << CS00); // Fcpu speed\r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+ /* Set speaker as output */\r
+ DDRC |= (1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+ /* Set speakers as outputs */\r
+ DDRC |= ((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+ /* Set PORTC as outputs */\r
+ DDRC |= 0xFF;\r
+#endif\r
+\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+ /* PWM speaker timer initialization */\r
+ TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)\r
+ | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP\r
+ TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed\r
+#endif \r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ /* Stop the sample reload timer */\r
+ TCCR0B = 0;\r
+\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+ /* Stop the PWM generation timer */\r
+ TCCRxB = 0;\r
+#endif \r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+ /* Set speaker as input to reduce current draw */\r
+ DDRC &= ~(1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+ /* Set speakers as inputs to reduce current draw */\r
+ DDRC &= ~((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+ /* Set PORTC low */\r
+ PORTC = 0x00;\r
+#endif\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ \r
+ if (!(USB_Audio_ConfigureEndpoints(&Speaker_Audio_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_Audio_ProcessControlPacket(&Speaker_Audio_Interface);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for AudioOutput.c.\r
+ */\r
+\r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+ \r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Peripheral/ADC.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+ \r
+ /* Macros: */\r
+ #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #define TCCRxA TCCR3A\r
+ #define TCCRxB TCCR3B\r
+ #define OCRxA OCR3A\r
+ #define OCRxB OCR3B\r
+ #define WGMx0 WGM30\r
+ #define WGMx2 WGM32\r
+ #define COMxA1 COM3A1\r
+ #define COMxA0 COM3A0\r
+ #define COMxB1 COM3B1\r
+ #define COMxB0 COM3B0\r
+ #define CSx0 CS30\r
+ #else\r
+ /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+ #define TCCRxA TCCR1A\r
+\r
+ /** Timer count register used for right channel PWM audio output */\r
+ #define TCCRxB TCCR1B\r
+\r
+ /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+ #define OCRxA OCR1A\r
+\r
+ /** Timer compare register used for right channel PWM audio output */\r
+ #define OCRxB OCR1B\r
+\r
+ /** Timer control register mask used to select PWM mode */\r
+ #define WGMx0 WGM10\r
+\r
+ /** Timer control register mask used to select PWM mode */\r
+ #define WGMx2 WGM12\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxA1 COM1A1\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxA0 COM1A0\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxB1 COM1B1\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxB0 COM1B0\r
+\r
+ /** Timer control register mask used to start the timer at Fcpu clock rate */\r
+ #define CSx0 CS10\r
+ #endif\r
+ \r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void ProcessNextSample(void);\r
+ \r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Audio Output Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Audio Class</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Standard Audio Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Audio Class Specification</td>\r
+ * <td>USBIF Audio Class Terminal Types Specification</td>\r
+ * <td>USBIF Audio Data Formats Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Audio demonstration application. This gives a simple reference\r
+ * application for implementing a USB Audio Output device using the\r
+ * basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ * required).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a USB speaker. Incoming audio will output in 8-bit PWM onto\r
+ * the timer output (timer 3 for the AT90USBXXX6/7 USB AVRs, timer 1 for\r
+ * the AT90USBXXX2 controller AVRs) compare channel A for AUDIO_OUT_MONO\r
+ * mode, on channels A and B for AUDIO_OUT_STEREO and on the board LEDs\r
+ * for AUDIO_OUT_LEDS mode. Decouple audio outputs with a capacitor and\r
+ * attach to a speaker to hear the audio.\r
+ * \r
+ * Under Windows, if a driver request dialogue pops up, select the option\r
+ * to automatically install the appropriate drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_STEREO</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_MONO</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_LEDS</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in stereo to the board LEDs.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_PORTC</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an\r
+ * external DAC.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ * <td>Descriptors.h</td>\r
+ * <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(02.00),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2046,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+\r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .AudioControlInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR \r
+ },\r
+ \r
+ .AudioControlInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Header,\r
+ \r
+ .ACSpecification = VERSION_BCD(01.00),\r
+ .TotalLength = (sizeof(USB_AudioInterface_AC_t) +\r
+ sizeof(USB_AudioInputTerminal_t) +\r
+ sizeof(USB_AudioOutputTerminal_t)),\r
+ \r
+ .InCollection = 1,\r
+ .InterfaceNumbers = {1}, \r
+ },\r
+\r
+ .InputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputTerminal,\r
+ \r
+ .TerminalID = 0x01,\r
+ .TerminalType = TERMINAL_STREAMING,\r
+ .AssociatedOutputTerminal = 0x00,\r
+ \r
+ .TotalChannels = 2,\r
+ .ChannelConfig = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT),\r
+ \r
+ .ChannelStrIndex = NO_DESCRIPTOR,\r
+ .TerminalStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .OutputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputTerminal,\r
+ \r
+ .TerminalID = 0x02,\r
+ .TerminalType = TERMINAL_OUT_SPEAKER,\r
+ .AssociatedInputTerminal = 0x00,\r
+ \r
+ .SourceID = 0x01,\r
+ \r
+ .TerminalStrIndex = NO_DESCRIPTOR \r
+ },\r
+\r
+ .AudioStreamInterface_Alt0 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .AudioStreamInterface_Alt1 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 1,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .AudioStreamInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .TerminalLink = 0x01,\r
+ \r
+ .FrameDelay = 1,\r
+ .AudioFormat = 0x0001\r
+ },\r
+ \r
+ .AudioFormat = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Format,\r
+\r
+ .FormatType = 0x01,\r
+ .Channels = 0x02,\r
+ \r
+ .SubFrameSize = 0x02,\r
+ .BitResolution = 16,\r
+\r
+ .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)), \r
+ .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+ },\r
+ \r
+ .AudioEndpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | AUDIO_STREAM_EPNUM),\r
+ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = AUDIO_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 1\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .AudioEndpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .Attributes = EP_ACCEPTS_SMALL_PACKETS,\r
+ \r
+ .LockDelayUnits = 0x00,\r
+ .LockDelay = 0x0000\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Audio Out Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration:\r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00:\r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+ #define AUDIO_STREAM_EPNUM 1\r
+ #else\r
+ #define AUDIO_STREAM_EPNUM 3 \r
+ #endif\r
+ \r
+ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+ * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+ * USB AVR models will result in unavoidable distorted output.\r
+ */\r
+ #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+ \r
+ /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+ #define AUDIO_SAMPLE_FREQUENCY 48000\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t AudioControlInterface;\r
+ USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
+ USB_AudioInputTerminal_t InputTerminal;\r
+ USB_AudioOutputTerminal_t OutputTerminal;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt0;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt1;\r
+ USB_AudioInterface_AS_t AudioStreamInterface_SPC;\r
+ USB_AudioFormat_t AudioFormat;\r
+ USB_AudioStreamEndpoint_Std_t AudioEndpoint;\r
+ USB_AudioStreamEndpoint_Spc_t AudioEndpoint_SPC;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Audio Output Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = YES\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioOutput\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DAUDIO_OUT_MONO\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>CDC</ProjectName><Created>30-Sep-2008 14:04:34</Created><LastEdit>30-Sep-2008 14:04:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:04:34</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\Demos\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>CDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>CDC.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>CDC.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the CDC demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+ \r
+#include "CDC.h"\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ * passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
+ {\r
+ .ControlInterfaceNumber = 0,\r
+\r
+ .DataINEndpointNumber = CDC_TX_EPNUM,\r
+ .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = CDC_RX_EPNUM,\r
+ .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
+ .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ CheckJoystickMovement();\r
+ \r
+ uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface);\r
+ while (BytesToDiscard--)\r
+ USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface);\r
+\r
+ USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */\r
+void CheckJoystickMovement(void)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ char* ReportString = NULL;\r
+ static bool ActionSent = false;\r
+ \r
+ char* JoystickStrings[] =\r
+ {\r
+ "Joystick Up\r\n",\r
+ "Joystick Down\r\n",\r
+ "Joystick Left\r\n",\r
+ "Joystick Right\r\n",\r
+ "Joystick Pressed\r\n",\r
+ };\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportString = JoystickStrings[0];\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportString = JoystickStrings[1];\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportString = JoystickStrings[2];\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportString = JoystickStrings[3];\r
+ else if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportString = JoystickStrings[4];\r
+ else\r
+ ActionSent = false;\r
+ \r
+ if ((ReportString != NULL) && (ActionSent == false))\r
+ {\r
+ ActionSent = true;\r
+ \r
+ USB_CDC_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString)); \r
+ }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for CDC.c.\r
+ */\r
+\r
+#ifndef _CDC_H_\r
+#define _CDC_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void CheckJoystickMovement(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Communications Device Class Device (Virtual Serial Port)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Communications Device Class (CDC)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Abstract Control Model (ACM)</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF CDC Class Standard</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Communications Device Class demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a CDC device acting as a virtual serial port. Joystick\r
+ * actions are transmitted to the host as strings. The device\r
+ * does not respond to serial data sent from the host.\r
+ * \r
+ * After running this demo for the first time on a new computer,\r
+ * you will need to supply the .INF file located in this demo\r
+ * project's directory as the device's driver when running under\r
+ * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ * negating the need for custom drivers for the device. Other\r
+ * Operating Systems should automatically use their own inbuilt\r
+ * CDC-ACM drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x02,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2044,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x01}\r
+ },\r
+\r
+ .CDC_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address; \r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+ /* Macros: */ \r
+ /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPNUM 2\r
+\r
+ /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+ #define CDC_TX_EPNUM 3 \r
+\r
+ /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+ #define CDC_RX_EPNUM 4 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 16 \r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
+ USB_Descriptor_Endpoint_t ManagementEndpoint;\r
+ USB_Descriptor_Interface_t DCI_Interface;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+; Windows LUFA CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_2044\r
+\r
+;------------------------------------------------------------------------------\r
+; Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+; String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = CDC\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0xEF,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204E,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 4,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .IAD1 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+ .FirstInterfaceIndex = 0,\r
+ .TotalInterfaces = 2,\r
+\r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+\r
+ .IADStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC1_CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC1_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC1_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x01}\r
+ },\r
+\r
+ .CDC1_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC1_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .CDC1_ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .CDC1_DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC1_DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .CDC1_DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+\r
+ .IAD2 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+ .FirstInterfaceIndex = 2,\r
+ .TotalInterfaces = 2,\r
+\r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+\r
+ .IADStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC2_CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 2,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC2_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC2_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x03}\r
+ },\r
+\r
+ .CDC2_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC2_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x02, 0x03}\r
+ },\r
+\r
+ .CDC2_ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .CDC2_DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 3,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC2_DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .CDC2_DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Dual CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address; \r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+ /* Macros: */\r
+ /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
+ #define CDC1_NOTIFICATION_EPNUM 3\r
+\r
+ /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
+ #define CDC1_TX_EPNUM 1 \r
+\r
+ /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
+ #define CDC1_RX_EPNUM 2 \r
+\r
+ /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
+ #define CDC2_NOTIFICATION_EPNUM 4\r
+\r
+ /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
+ #define CDC2_TX_EPNUM 5 \r
+\r
+ /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
+ #define CDC2_RX_EPNUM 6 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 16 \r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_Association_t IAD1;\r
+ USB_Descriptor_Interface_t CDC1_CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC1_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_Union;\r
+ USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint;\r
+ USB_Descriptor_Interface_t CDC1_DCI_Interface;\r
+ USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t CDC1_DataInEndpoint;\r
+ USB_Descriptor_Interface_Association_t IAD2;\r
+ USB_Descriptor_Interface_t CDC2_CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC2_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_Union;\r
+ USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint;\r
+ USB_Descriptor_Interface_t CDC2_DCI_Interface;\r
+ USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t CDC2_DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Dual CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>DualCDC</ProjectName><Created>30-Sep-2008 14:06:03</Created><LastEdit>30-Sep-2008 14:06:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:03</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\Demos\DualCDC\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>DualCDC.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualCDC.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>DualCDC.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the DualCDC demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "DualCDC.h"\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ * passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another. This is for the first CDC interface,\r
+ * which sends strings to the host for each joystick movement.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial1_CDC_Interface =\r
+ {\r
+ .ControlInterfaceNumber = 0,\r
+\r
+ .DataINEndpointNumber = CDC1_TX_EPNUM,\r
+ .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = CDC1_RX_EPNUM,\r
+ .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .NotificationEndpointNumber = CDC1_NOTIFICATION_EPNUM,\r
+ .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ };\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ * passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another. This is for the second CDC interface,\r
+ * which echos back all received data from the host.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial2_CDC_Interface =\r
+ {\r
+ .ControlInterfaceNumber = 2,\r
+\r
+ .DataINEndpointNumber = CDC2_TX_EPNUM,\r
+ .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = CDC2_RX_EPNUM,\r
+ .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .NotificationEndpointNumber = CDC2_NOTIFICATION_EPNUM,\r
+ .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ CheckJoystickMovement();\r
+\r
+ /* Discard all received data on the first CDC interface */\r
+ uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial1_CDC_Interface);\r
+ while (BytesToDiscard--)\r
+ USB_CDC_ReceiveByte(&VirtualSerial1_CDC_Interface);\r
+\r
+ /* Echo all received data on the second CDC interface */\r
+ uint16_t BytesToEcho = USB_CDC_BytesReceived(&VirtualSerial2_CDC_Interface);\r
+ while (BytesToEcho--)\r
+ USB_CDC_SendByte(&VirtualSerial2_CDC_Interface, USB_CDC_ReceiveByte(&VirtualSerial2_CDC_Interface));\r
+ \r
+ USB_CDC_USBTask(&VirtualSerial1_CDC_Interface);\r
+ USB_CDC_USBTask(&VirtualSerial2_CDC_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending strings to the host upon each change\r
+ * through the first of the CDC interfaces.\r
+ */\r
+void CheckJoystickMovement(void)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ char* ReportString = NULL;\r
+ static bool ActionSent = false;\r
+\r
+ char* JoystickStrings[] =\r
+ {\r
+ "Joystick Up\r\n",\r
+ "Joystick Down\r\n",\r
+ "Joystick Left\r\n",\r
+ "Joystick Right\r\n",\r
+ "Joystick Pressed\r\n",\r
+ };\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportString = JoystickStrings[0];\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportString = JoystickStrings[1];\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportString = JoystickStrings[2];\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportString = JoystickStrings[3];\r
+ else if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportString = JoystickStrings[4];\r
+ else\r
+ ActionSent = false;\r
+ \r
+ if ((ReportString != NULL) && (ActionSent == false))\r
+ {\r
+ ActionSent = true;\r
+ \r
+ USB_CDC_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString)); \r
+ }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial1_CDC_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+\r
+ if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial2_CDC_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_CDC_ProcessControlPacket(&VirtualSerial1_CDC_Interface);\r
+ USB_CDC_ProcessControlPacket(&VirtualSerial2_CDC_Interface);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for DualCDC.c.\r
+ */\r
+\r
+#ifndef _DUAL_CDC_H_\r
+#define _DUAL_CDC_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void CheckJoystickMovement(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Miscellaneous Device Class</td>\r
+ * <td>( Sub-Interface: Communications Device Class (CDC) )</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Common Class</td> \r
+ * <td>( Sub-Interface: Abstract Control Model (ACM) )</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Interface Association Descriptor ECN</td>\r
+ * <td>USBIF CDC Class Standard</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Dual Communications Device Class demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a compound device with dual CDC functions acting as a pair\r
+ * of virtual serial ports. This demo uses Interface Association\r
+ * Descriptors to link together the pair of related CDC\r
+ * descriptors for each virtual serial port, which may not be\r
+ * supported in all OSes - Windows Vista is supported, as is\r
+ * XP (although the latter may need a hotfix to function).\r
+ * \r
+ * Joystick actions are transmitted to the host as strings\r
+ * through the first serial port. The device does not respond to\r
+ * serial data sent from the host in the first serial port.\r
+ * \r
+ * The second serial port echoes back data sent from the host.\r
+ * \r
+ * After running this demo for the first time on a new computer,\r
+ * you will need to supply the .INF file located in this demo\r
+ * project's directory as the device's driver when running under\r
+ * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ * negating the need for custom drivers for the device. Other\r
+ * Operating Systems should automatically use their own inbuilt\r
+ * CDC-ACM drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+; Windows LUFA Dual CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_00\r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_02\r
+\r
+;------------------------------------------------------------------------------\r
+; Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+; String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = DualCDC\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =\r
+{\r
+ 0x06, 0x9c, 0xff, /* Usage Page (Vendor Defined) */\r
+ 0x09, 0x01, /* Usage (Vendor Defined) */\r
+ 0xa1, 0x01, /* Collection (Vendor Defined) */\r
+ 0x09, 0x02, /* Usage (Vendor Defined) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0xff, /* Logical Maximum (255) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x09, 0x03, /* Usage (Vendor Defined) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0xff, /* Logical Maximum (255) */\r
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
+ 0xc0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204F,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .GenericHID = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(GenericReport)\r
+ },\r
+\r
+ .GenericINEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = GENERIC_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Generic HID Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.GenericHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&GenericReport;\r
+ Size = sizeof(GenericReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /** Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t GenericHID;\r
+ USB_Descriptor_Endpoint_t GenericINEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Macros: */\r
+ /** Endpoint number of the Generic HID reporting IN endpoint. */\r
+ #define GENERIC_IN_EPNUM 1\r
+\r
+ /** Size in bytes of the Generic HID reporting endpoint. */\r
+ #define GENERIC_EPSIZE 8\r
+ \r
+ /** Size in bytes of the Generic HID reports (including report ID byte). */\r
+ #define GENERIC_REPORT_SIZE 8\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Generic HID Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>GenericHID</ProjectName><Created>29-Mar-2009 23:19:24</Created><LastEdit>29-Mar-2009 23:19:40</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>29-Mar-2009 23:19:24</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\GenericHID\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>GenericHID.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>GenericHID.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>GenericHID.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-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20090313\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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the GenericHID demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "GenericHID.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ * passed to all HID Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Generic_HID_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .ReportINEndpointNumber = GENERIC_IN_EPNUM,\r
+ .ReportINEndpointSize = GENERIC_EPSIZE,\r
+ \r
+ .ReportINBufferSize = GENERIC_REPORT_SIZE,\r
+\r
+ .UsingReportProtocol = true,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ USB_HID_USBTask(&Generic_HID_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ USB_Init();\r
+\r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = ((F_CPU / 64) / 1000);\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_HID_ConfigureEndpoints(&Generic_HID_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_HID_ProcessControlPacket(&Generic_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ if (Generic_HID_Interface.IdleMSRemaining)\r
+ Generic_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report should be stored\r
+ *\r
+ * \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+ // Create generic HID report here\r
+ \r
+ return 0;\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report has been stored\r
+ * \param ReportSize Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+ void* ReportData, uint16_t ReportSize)\r
+{\r
+ // Process received generic HID report here\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for GenericHID.c.\r
+ */\r
+ \r
+#ifndef _GENERICHID_H_\r
+#define _GENERICHID_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <avr/interrupt.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+ \r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+ void* ReportData, uint16_t ReportSize);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Generic HID Device\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Generic HID device demonstration application. This gives a simple reference application\r
+ * for implementing a generic HID device, using the basic USB HID drivers in all modern\r
+ * OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
+ * and from a USB Host, and by default transmits the last sent report back to the host.\r
+ * \r
+ * On start-up the system will automatically enumerate and function as a vendor HID device.\r
+ * When controlled by a custom HID class application, reports can be sent and received by\r
+ * both the standard data endpoint and control request methods defined in the HID specification.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ * \r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>GENERIC_REPORT_SIZE</td>\r
+ * <td>Descriptors.h</td>\r
+ * <td>This token defines the size of the device reports, both sent and received. The value must be an\r
+ * integer ranging from 1 to 255.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = GenericHID\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x04, /* Usage (Joystick) */\r
+ 0xa1, 0x01, /* Collection (Application) */\r
+ 0x09, 0x01, /* Usage (Pointer) */\r
+ 0xa1, 0x00, /* Collection (Physical) */\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x30, /* Usage (X) */\r
+ 0x09, 0x31, /* Usage (Y) */\r
+ 0x15, 0x9c, /* Logical Minimum (-100) */\r
+ 0x25, 0x64, /* Logical Maximum (100) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x81, 0x82, /* Input (Data, Variable, Absolute, Volatile) */\r
+ 0x05, 0x09, /* Usage Page (Button) */\r
+ 0x09, 0x02, /* Usage (Button 2) */\r
+ 0x09, 0x01, /* Usage (Button 1) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x75, 0x06, /* Report Size (6) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x81, 0x01, /* Input (Constant) */\r
+ 0xc0, /* End Collection */\r
+ 0xc0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2043,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .JoystickHID = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(JoystickReport)\r
+ },\r
+\r
+ .JoystickEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = JOYSTICK_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ } \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Joystick Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.JoystickHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&JoystickReport;\r
+ Size = sizeof(JoystickReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t JoystickHID;\r
+ USB_Descriptor_Endpoint_t JoystickEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Joystick HID reporting IN endpoint. */\r
+ #define JOYSTICK_EPNUM 1\r
+\r
+ /** Size in bytes of the Joystick HID reporting IN endpoint. */\r
+ #define JOYSTICK_EPSIZE 8\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Joystick Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>Joystick</ProjectName><Created>30-Sep-2008 14:06:38</Created><LastEdit>30-Sep-2008 14:07:27</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:38</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\Demos\Joystick\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Joystick.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Joystick.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Joystick.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Joystick demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Joystick.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ * passed to all HID Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Joystick_HID_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .ReportINEndpointNumber = JOYSTICK_EPNUM,\r
+ .ReportINEndpointSize = JOYSTICK_EPSIZE,\r
+ \r
+ .ReportINBufferSize = sizeof(USB_JoystickReport_Data_t),\r
+\r
+ .UsingReportProtocol = true,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ USB_HID_USBTask(&Joystick_HID_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+ USB_Init();\r
+\r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = ((F_CPU / 64) / 1000);\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_HID_ConfigureEndpoints(&Joystick_HID_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_HID_ProcessControlPacket(&Joystick_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ if (Joystick_HID_Interface.IdleMSRemaining)\r
+ Joystick_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report should be stored\r
+ *\r
+ * \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+ USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;\r
+ \r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ JoystickReport->Y = -100;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ JoystickReport->Y = 100;\r
+\r
+ if (JoyStatus_LCL & JOY_RIGHT)\r
+ JoystickReport->X = 100;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ JoystickReport->X = -100;\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ JoystickReport->Button = (1 << 1);\r
+ \r
+ if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+ JoystickReport->Button |= (1 << 0);\r
+ \r
+ return sizeof(USB_JoystickReport_Data_t);\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report has been stored\r
+ * \param ReportSize Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+ void* ReportData, uint16_t ReportSize)\r
+{\r
+ // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Joystick.c.\r
+ */\r
+ \r
+#ifndef _JOYSTICK_H_\r
+#define _JOYSTICK_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */\r
+ int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
+ uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
+ } USB_JoystickReport_Data_t;\r
+ \r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+ void* ReportData, uint16_t ReportSize);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Joystick Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Joystick demonstration application. This gives a simple reference\r
+ * application for implementing a USB Keyboard device, for USB Joysticks\r
+ * using the standard Keyboard HID profile.\r
+ * \r
+ * This device will show up as a generic joystick device, with two buttons.\r
+ * Pressing the joystick inwards is the first button, and the HWB button\r
+ * is the second.\r
+ * \r
+ * Moving the joystick on the selected board moves the joystick location on\r
+ * the host computer.\r
+ * \r
+ * Currently only single interface joysticks are supported.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Joystick\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x06, /* Usage (Keyboard) */\r
+ 0xa1, 0x01, /* Collection (Application) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x95, 0x08, /* Report Count (8) */\r
+ 0x05, 0x07, /* Usage Page (Key Codes) */\r
+ 0x19, 0xe0, /* Usage Minimum (Keyboard LeftControl) */\r
+ 0x29, 0xe7, /* Usage Maximum (Keyboard Right GUI) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x81, 0x03, /* Input (Const, Variable, Absolute) */\r
+ 0x95, 0x05, /* Report Count (5) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x08, /* Usage Page (LEDs) */\r
+ 0x19, 0x01, /* Usage Minimum (Num Lock) */\r
+ 0x29, 0x05, /* Usage Maximum (Kana) */\r
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x03, /* Report Size (3) */\r
+ 0x91, 0x03, /* Output (Const, Variable, Absolute) */\r
+ 0x95, 0x06, /* Report Count (6) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x65, /* Logical Maximum (101) */\r
+ 0x05, 0x07, /* Usage Page (Keyboard) */\r
+ 0x19, 0x00, /* Usage Minimum (Reserved (no event indicated)) */\r
+ 0x29, 0x65, /* Usage Maximum (Keyboard Application) */\r
+ 0x81, 0x00, /* Input (Data, Array, Absolute) */\r
+ 0xc0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2042,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .KeyboardHID = \r
+ { \r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(KeyboardReport)\r
+ },\r
+ \r
+ .KeyboardEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = KEYBOARD_EPSIZE,\r
+ .PollingIntervalMS = 0x04\r
+ },\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Denver Gingerich"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&KeyboardReport;\r
+ Size = sizeof(KeyboardReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t KeyboardHID;\r
+ USB_Descriptor_Endpoint_t KeyboardEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+ #define KEYBOARD_EPNUM 1\r
+ \r
+ /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */ \r
+ #define KEYBOARD_EPSIZE 8\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Keyboard Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>Keyboard</ProjectName><Created>30-Sep-2008 13:59:29</Created><LastEdit>30-Sep-2008 14:00:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 13:59:29</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Keyboard.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Keyboard\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Keyboard.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Keyboard.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Keyboard.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><File00000><FileId>00000</FileId><FileName>makefile</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Keyboard demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Keyboard.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ * passed to all HID Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .ReportINEndpointNumber = KEYBOARD_EPNUM,\r
+ .ReportINEndpointSize = KEYBOARD_EPSIZE,\r
+\r
+ .ReportINBufferSize = sizeof(USB_KeyboardReport_Data_t),\r
+\r
+ .IdleCount = 500,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ USB_HID_USBTask(&Keyboard_HID_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware()\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+ USB_Init();\r
+\r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = ((F_CPU / 64) / 1000);\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ if (Keyboard_HID_Interface.IdleMSRemaining)\r
+ Keyboard_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report should be stored\r
+ *\r
+ * \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+ USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
+ \r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ KeyboardReport->KeyCode[0] = 0x04; // A\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ KeyboardReport->KeyCode[0] = 0x05; // B\r
+\r
+ if (JoyStatus_LCL & JOY_LEFT)\r
+ KeyboardReport->KeyCode[0] = 0x06; // C\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ KeyboardReport->KeyCode[0] = 0x07; // D\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ KeyboardReport->KeyCode[0] = 0x08; // E\r
+ \r
+ if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+ KeyboardReport->KeyCode[0] = 0x09; // F\r
+ \r
+ return sizeof(USB_KeyboardReport_Data_t);\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report has been stored\r
+ * \param ReportSize Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+ void* ReportData, uint16_t ReportSize)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ uint8_t* LEDReport = (uint8_t*)ReportData;\r
+\r
+ if (*LEDReport & 0x01) // NUM Lock\r
+ LEDMask |= LEDS_LED1;\r
+ \r
+ if (*LEDReport & 0x02) // CAPS Lock\r
+ LEDMask |= LEDS_LED3;\r
+\r
+ if (*LEDReport & 0x04) // SCROLL Lock\r
+ LEDMask |= LEDS_LED4;\r
+ \r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Keyboard.c.\r
+ */\r
+\r
+#ifndef _KEYBOARD_H_\r
+#define _KEYBOARD_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/interrupt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+ uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+ uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+ } USB_KeyboardReport_Data_t;\r
+ \r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+ void* ReportData, uint16_t ReportSize);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Keyboard Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description:\r
+ *\r
+ * Keyboard demonstration application. This gives a simple reference application\r
+ * for implementing a USB Keyboard using the basic USB HID drivers in all modern\r
+ * OSes (i.e. no special drivers required). It is boot protocol compatible, and thus\r
+ * works under compatible BIOS as if it was a native keyboard (e.g. PS/2).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a keyboard when the USB connection to a host is present. To use\r
+ * the keyboard example, manipulate the joystick to send the letters\r
+ * a, b, c, d and e. See the USB HID documentation for more information\r
+ * on sending keyboard event and key presses.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ * \r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Keyboard\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ *\r
+ * This descriptor describes the mouse HID interface's report structure.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x02, /* Usage (Mouse) */\r
+ 0xA1, 0x01, /* Collection (Application) */\r
+ 0x09, 0x01, /* Usage (Pointer) */\r
+ 0xA1, 0x00, /* Collection (Physical) */\r
+ 0x95, 0x03, /* Report Count (3) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x09, /* Usage Page (Button) */\r
+ 0x19, 0x01, /* Usage Minimum (Button 1) */\r
+ 0x29, 0x03, /* Usage Maximum (Button 3) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x05, /* Report Size (5) */\r
+ 0x81, 0x01, /* Input (Constant) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop Control) */\r
+ 0x09, 0x30, /* Usage X */\r
+ 0x09, 0x31, /* Usage Y */\r
+ 0x15, 0x81, /* Logical Minimum (-127) */\r
+ 0x25, 0x7F, /* Logical Maximum (127) */\r
+ 0x81, 0x06, /* Input (Data, Variable, Relative) */\r
+ 0xC0, /* End Collection */\r
+ 0xC0, /* End Collection */\r
+};\r
+\r
+/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x06, /* Usage (Keyboard) */\r
+ 0xa1, 0x01, /* Collection (Application) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x95, 0x08, /* Report Count (8) */\r
+ 0x05, 0x07, /* Usage Page (Key Codes) */\r
+ 0x19, 0xe0, /* Usage Minimum (Keyboard LeftControl) */\r
+ 0x29, 0xe7, /* Usage Maximum (Keyboard Right GUI) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x81, 0x03, /* Input (Const, Variable, Absolute) */\r
+ 0x95, 0x05, /* Report Count (5) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x08, /* Usage Page (LEDs) */\r
+ 0x19, 0x01, /* Usage Minimum (Num Lock) */\r
+ 0x29, 0x05, /* Usage Maximum (Kana) */\r
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x03, /* Report Size (3) */\r
+ 0x91, 0x03, /* Output (Const, Variable, Absolute) */\r
+ 0x95, 0x06, /* Report Count (6) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x65, /* Logical Maximum (101) */\r
+ 0x05, 0x07, /* Usage Page (Keyboard) */\r
+ 0x19, 0x00, /* Usage Minimum (Reserved (no event indicated)) */\r
+ 0x29, 0x65, /* Usage Maximum (Keyboard Application) */\r
+ 0x81, 0x00, /* Input (Data, Array, Absolute) */\r
+ 0xC0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204D,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .KeyboardInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .KeyboardHID = \r
+ { \r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(KeyboardReport)\r
+ },\r
+ \r
+ .KeyboardInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = HID_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+\r
+ .MouseInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x01,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x02,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MouseHID = \r
+ { \r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(MouseReport)\r
+ },\r
+ \r
+ .MouseInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_IN_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = HID_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Mouse and Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ if (!(wIndex))\r
+ {\r
+ Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ }\r
+ else\r
+ {\r
+ Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+ Size = sizeof(USB_Descriptor_HID_t); \r
+ }\r
+ break;\r
+ case DTYPE_Report: \r
+ if (!(wIndex))\r
+ {\r
+ Address = (void*)&KeyboardReport;\r
+ Size = sizeof(KeyboardReport);\r
+ }\r
+ else\r
+ { \r
+ Address = (void*)&MouseReport;\r
+ Size = sizeof(MouseReport);\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t KeyboardInterface;\r
+ USB_Descriptor_HID_t KeyboardHID;\r
+ USB_Descriptor_Endpoint_t KeyboardInEndpoint;\r
+ USB_Descriptor_Interface_t MouseInterface;\r
+ USB_Descriptor_HID_t MouseHID;\r
+ USB_Descriptor_Endpoint_t MouseInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+ #define KEYBOARD_IN_EPNUM 1\r
+\r
+ /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+ #define MOUSE_IN_EPNUM 3\r
+\r
+ /** Size in bytes of each of the HID reporting IN and OUT endpoints. */\r
+ #define HID_EPSIZE 8\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Combined Keyboard/Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>KeyboardMouse</ProjectName><Created>30-Sep-2008 14:11:00</Created><LastEdit>30-Sep-2008 14:11:17</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:11:00</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\Demos\KeyboardMouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>KeyboardMouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>KeyboardMouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>KeyboardMouse.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the KeyboardMouse demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "KeyboardMouse.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ * passed to all HID Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another. This is for the keyboard HID\r
+ * interface within the device.\r
+ */\r
+USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .ReportINEndpointNumber = KEYBOARD_IN_EPNUM,\r
+ .ReportINEndpointSize = HID_EPSIZE,\r
+ \r
+ .ReportINBufferSize = sizeof(USB_KeyboardReport_Data_t),\r
+\r
+ .IdleCount = 500,\r
+ };\r
+ \r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ * passed to all HID Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another. This is for the mouse HID\r
+ * interface within the device.\r
+ */\r
+USB_ClassInfo_HID_t Mouse_HID_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .ReportINEndpointNumber = MOUSE_IN_EPNUM,\r
+ .ReportINEndpointSize = HID_EPSIZE,\r
+\r
+ .ReportINBufferSize = sizeof(USB_MouseReport_Data_t),\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ USB_HID_USBTask(&Keyboard_HID_Interface);\r
+ USB_HID_USBTask(&Mouse_HID_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware()\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ USB_Init();\r
+\r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = ((F_CPU / 64) / 1000);\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ \r
+ if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
+ USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ if (Keyboard_HID_Interface.IdleMSRemaining)\r
+ Keyboard_HID_Interface.IdleMSRemaining--;\r
+\r
+ if (Mouse_HID_Interface.IdleMSRemaining)\r
+ Mouse_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report should be stored\r
+ *\r
+ * \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+ if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
+ {\r
+ USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
+ \r
+ /* If first board button not being held down, no keyboard report */\r
+ if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))\r
+ return 0;\r
+ \r
+ if (JoyStatus_LCL & JOY_UP)\r
+ KeyboardReport->KeyCode[0] = 0x04; // A\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ KeyboardReport->KeyCode[0] = 0x05; // B\r
+\r
+ if (JoyStatus_LCL & JOY_LEFT)\r
+ KeyboardReport->KeyCode[0] = 0x06; // C\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ KeyboardReport->KeyCode[0] = 0x07; // D\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ KeyboardReport->KeyCode[0] = 0x08; // E\r
+ \r
+ return sizeof(USB_KeyboardReport_Data_t);\r
+ }\r
+ else\r
+ {\r
+ USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
+\r
+ /* If first board button being held down, no mouse report */\r
+ if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+ return 0;\r
+ \r
+ if (JoyStatus_LCL & JOY_UP)\r
+ MouseReport->Y = -1;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ MouseReport->Y = 1;\r
+\r
+ if (JoyStatus_LCL & JOY_RIGHT)\r
+ MouseReport->X = 1;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ MouseReport->X = -1;\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ MouseReport->Button = (1 << 0);\r
+ \r
+ return sizeof(USB_MouseReport_Data_t); \r
+ }\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report has been stored\r
+ * \param ReportSize Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+ void* ReportData, uint16_t ReportSize)\r
+{\r
+ if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
+ {\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ uint8_t* LEDReport = (uint8_t*)ReportData;\r
+\r
+ if (*LEDReport & 0x01) // NUM Lock\r
+ LEDMask |= LEDS_LED1;\r
+ \r
+ if (*LEDReport & 0x02) // CAPS Lock\r
+ LEDMask |= LEDS_LED3;\r
+\r
+ if (*LEDReport & 0x04) // SCROLL Lock\r
+ LEDMask |= LEDS_LED4;\r
+ \r
+ LEDs_SetAllLEDs(LEDMask);\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+#ifndef _KEYBOARD_MOUSE_H_\r
+#define _KEYBOARD_MOUSE_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+ uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+ uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+ } USB_KeyboardReport_Data_t;\r
+\r
+ /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+ int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+ int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+ } USB_MouseReport_Data_t;\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+ void* ReportData, uint16_t ReportSize);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Dual HID Keyboard and Mouse Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Keyboard/Mouse demonstration application. This gives a simple reference\r
+ * application for implementing a composite device containing both USB Keyboard\r
+ * and USB Mouse functionality using the basic USB HID drivers in all modern OSes\r
+ * (i.e. no special drivers required). This example uses two separate HID\r
+ * interfaces for each function. It is boot protocol compatible, and thus works under\r
+ * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a keyboard when the USB connection to a host is present and the HWB is not\r
+ * pressed. When enabled, manipulate the joystick to send the letters\r
+ * a, b, c, d and e. See the USB HID documentation for more information\r
+ * on sending keyboard event and key presses.\r
+ * \r
+ * When the HWB is pressed, the mouse mode is enabled. When enabled, move the\r
+ * joystick to move the pointer, and push the joystick inwards to simulate a\r
+ * left-button click.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = KeyboardMouse\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2048,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+\r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .AudioControlInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR \r
+ },\r
+ \r
+ .AudioControlInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Header,\r
+ \r
+ .ACSpecification = VERSION_BCD(01.00),\r
+ .TotalLength = sizeof(USB_AudioInterface_AC_t),\r
+ \r
+ .InCollection = 1,\r
+ .InterfaceNumbers = {1}, \r
+ },\r
+\r
+ .AudioStreamInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x03,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .AudioStreamInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_MIDI_AS_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_General,\r
+\r
+ .AudioSpecification = VERSION_BCD(01.00),\r
+ \r
+ .TotalLength = (sizeof(USB_Descriptor_Configuration_t) - offsetof(USB_Descriptor_Configuration_t, AudioStreamInterface_SPC))\r
+ },\r
+\r
+ .MIDI_In_Jack_Emb = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputJack,\r
+ \r
+ .JackType = MIDI_JACKTYPE_EMBEDDED,\r
+ .JackID = 0x01,\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MIDI_In_Jack_Ext = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputJack,\r
+ \r
+ .JackType = MIDI_JACKTYPE_EXTERNAL,\r
+ .JackID = 0x02,\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .MIDI_Out_Jack_Emb = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputJack,\r
+ \r
+ .JackType = MIDI_JACKTYPE_EMBEDDED,\r
+ .JackID = 0x03,\r
+\r
+ .NumberOfPins = 1,\r
+ .SourceJackID = {0x02},\r
+ .SourcePinID = {0x01},\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MIDI_Out_Jack_Ext = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputJack,\r
+ \r
+ .JackType = MIDI_JACKTYPE_EXTERNAL,\r
+ .JackID = 0x04,\r
+\r
+ .NumberOfPins = 1,\r
+ .SourceJackID = {0x01},\r
+ .SourcePinID = {0x01},\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MIDI_In_Jack_Endpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),\r
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = MIDI_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 0\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .MIDI_In_Jack_Endpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+\r
+ .TotalEmbeddedJacks = 0x01,\r
+ .AssociatedJackID = {0x01}\r
+ },\r
+\r
+ .MIDI_Out_Jack_Endpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),\r
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = MIDI_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 0\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .MIDI_Out_Jack_Endpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+\r
+ .TotalEmbeddedJacks = 0x01,\r
+ .AssociatedJackID = {0x03}\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA MIDI Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */\r
+ #define MIDI_STREAM_IN_EPNUM 2\r
+\r
+ /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */\r
+ #define MIDI_STREAM_OUT_EPNUM 1\r
+\r
+ /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */\r
+ #define MIDI_STREAM_EPSIZE 64\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t AudioControlInterface;\r
+ USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
+ USB_Descriptor_Interface_t AudioStreamInterface;\r
+ USB_AudioInterface_MIDI_AS_t AudioStreamInterface_SPC;\r
+ USB_MIDI_In_Jack_t MIDI_In_Jack_Emb;\r
+ USB_MIDI_In_Jack_t MIDI_In_Jack_Ext;\r
+ USB_MIDI_Out_Jack_t MIDI_Out_Jack_Emb;\r
+ USB_MIDI_Out_Jack_t MIDI_Out_Jack_Ext;\r
+ USB_AudioStreamEndpoint_Std_t MIDI_In_Jack_Endpoint;\r
+ USB_MIDI_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC;\r
+ USB_AudioStreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;\r
+ USB_MIDI_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - MIDI Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>MIDI</ProjectName><Created>30-Sep-2008 14:13:12</Created><LastEdit>30-Sep-2008 14:13:33</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:12</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\Demos\MIDI\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>MIDI.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MIDI.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>MIDI.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the MIDI demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "MIDI.h"\r
+\r
+/** LUFA MIDI Class driver interface configuration and state information. This structure is\r
+ * passed to all MIDI Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_MIDI_t Keyboard_MIDI_Interface =\r
+ {\r
+ .StreamingInterfaceNumber = 1,\r
+\r
+ .DataINEndpointNumber = MIDI_STREAM_IN_EPNUM,\r
+ .DataINEndpointSize = MIDI_STREAM_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = MIDI_STREAM_OUT_EPNUM,\r
+ .DataOUTEndpointSize = MIDI_STREAM_EPSIZE,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ CheckJoystickMovement();\r
+ \r
+ USB_MIDI_USBTask(&Keyboard_MIDI_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+ \r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+ USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */\r
+void CheckJoystickMovement(void)\r
+{\r
+ static uint8_t PrevJoystickStatus;\r
+\r
+ uint8_t MIDICommand = 0;\r
+ uint8_t MIDIPitch;\r
+ \r
+ /* Get current joystick mask, XOR with previous to detect joystick changes */\r
+ uint8_t JoystickStatus = Joystick_GetStatus();\r
+ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);\r
+ \r
+ /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */\r
+ uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));\r
+\r
+ if (JoystickChanges & JOY_LEFT)\r
+ {\r
+ MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+ MIDIPitch = 0x3C;\r
+ }\r
+\r
+ if (JoystickChanges & JOY_UP)\r
+ {\r
+ MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+ MIDIPitch = 0x3D;\r
+ }\r
+\r
+ if (JoystickChanges & JOY_RIGHT)\r
+ {\r
+ MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+ MIDIPitch = 0x3E;\r
+ }\r
+ \r
+ if (JoystickChanges & JOY_DOWN)\r
+ {\r
+ MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+ MIDIPitch = 0x3F;\r
+ }\r
+\r
+ if (JoystickChanges & JOY_PRESS)\r
+ {\r
+ MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+ MIDIPitch = 0x3B;\r
+ }\r
+ \r
+ if (MIDICommand)\r
+ {\r
+ USB_MIDI_EventPacket_t MIDIEvent = (USB_MIDI_EventPacket_t)\r
+ {\r
+ .CableNumber = 0,\r
+ .Command = MIDICommand,\r
+ \r
+ .Data1 = (MIDICommand << 4) | Channel,\r
+ .Data2 = MIDIPitch,\r
+ .Data3 = MIDI_STANDARD_VELOCITY, \r
+ };\r
+ \r
+ USB_MIDI_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);\r
+ }\r
+\r
+ PrevJoystickStatus = JoystickStatus;\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ \r
+ if (!(USB_MIDI_ConfigureEndpoints(&Keyboard_MIDI_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_MIDI_ProcessControlPacket(&Keyboard_MIDI_Interface);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for AudioOutput.c.\r
+ */\r
+ \r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+\r
+ #include "Descriptors.h"\r
+ \r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/Peripheral/ADC.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void CheckJoystickMovement(void);\r
+ \r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage MIDI Input Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Audio Class</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Standard Audio Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Audio Class Specification</td>\r
+ * <td>USB-MIDI Audio Class Extension Specification</td>\r
+ * <td>General MIDI Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * MIDI demonstration application. This gives a simple reference\r
+ * application for implementing the USB-MIDI class in USB devices.\r
+ * It is built upon the USB Audio class.\r
+ * \r
+ * Joystick movements are translated into note on/off messages and\r
+ * are sent to the host PC as MIDI streams which can be read by any\r
+ * MIDI program supporting MIDI IN devices.\r
+ * \r
+ * If the HWB is not pressed, channel 1 (default piano) is used. If\r
+ * the HWB is set, then channel 10 (default percussion) is selected.\r
+ * \r
+ * This device implements MIDI-THRU mode, with the IN MIDI data being\r
+ * generated by the device itself. OUT MIDI data is discarded.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MIDI\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MIDI.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2045,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = 0x03,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x08,\r
+ .SubClass = 0x06,\r
+ .Protocol = 0x50,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MASS_STORAGE_IN_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = MASS_STORAGE_IO_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MASS_STORAGE_OUT_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = MASS_STORAGE_IO_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Mass Storage Demo"\r
+};\r
+\r
+/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12\r
+ * digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By\r
+ * using the unique serial number string to identify a device, the device drivers do not need to be reinstalled\r
+ * each time the device is inserted into a different USB port on the same system. <b>This should be unique between\r
+ * devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system\r
+ * at the same time.</b>\r
+ */\r
+USB_Descriptor_String_t PROGMEM SerialNumberString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"000000000000"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ case 0x03: \r
+ Address = (void*)&SerialNumberString;\r
+ Size = pgm_read_byte(&SerialNumberString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Endpoint number of the Mass Storage device-to-host data IN endpoint. */\r
+ #define MASS_STORAGE_IN_EPNUM 3 \r
+\r
+ /** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */\r
+ #define MASS_STORAGE_OUT_EPNUM 4 \r
+\r
+ /** Size in bytes of the Mass Storage data endpoints. */\r
+ #define MASS_STORAGE_IO_EPSIZE 64\r
+ \r
+ /* Type Defines: */ \r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Mass Storage Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Functions to manage the physical dataflash media, including reading and writing of\r
+ * blocks of data. These functions are called by the SCSI layer when data must be stored\r
+ * or retrieved to/from the physical storage media. If a different media is used (such\r
+ * as a SD card or EEPROM), functions similar to these will need to be generated.\r
+ */\r
+\r
+#define INCLUDE_FROM_DATAFLASHMANAGER_C\r
+#include "DataflashManager.h"\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes\r
+ * them to the dataflash in Dataflash page sized blocks.\r
+ *\r
+ * \param BlockAddress Data block starting address for the write sequence\r
+ * \param TotalBlocks Number of blocks of data to write\r
+ */\r
+void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+ /* Wait until endpoint is ready before continuing */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if the endpoint is currently empty */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ {\r
+ /* Clear the current endpoint bank */\r
+ Endpoint_ClearOUT();\r
+ \r
+ /* Wait until the host has sent another packet */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ }\r
+\r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+ /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+ }\r
+#endif\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, 0);\r
+ }\r
+\r
+ /* Write one 16-byte chunk of data to the dataflash */\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+\r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (MSInterfaceInfo->IsMassStoreReset)\r
+ return; \r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter and reset the sub block counter */\r
+ TotalBlocks--;\r
+ }\r
+\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* If the endpoint is empty, clear it ready for the next packet from the host */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ * and writes them in OS sized blocks to the endpoint.\r
+ *\r
+ * \param BlockAddress Data block starting address for the read sequence\r
+ * \param TotalBlocks Number of blocks of data to read\r
+ */\r
+void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ \r
+ /* Wait until endpoint is ready before continuing */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ \r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if the endpoint is currently full */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ {\r
+ /* Clear the endpoint bank to send its contents to the host */\r
+ Endpoint_ClearIN();\r
+ \r
+ /* Wait until the endpoint is ready for more data */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ }\r
+ \r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ \r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ } \r
+\r
+ /* Read one 16-byte chunk of data from the dataflash */\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+ \r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (MSInterfaceInfo->IsMassStoreReset)\r
+ return;\r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter */\r
+ TotalBlocks--;\r
+ }\r
+ \r
+ /* If the endpoint is full, send its contents to the host */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ Endpoint_ClearIN();\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ * the a given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the\r
+ * dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the\r
+ * dataflash.\r
+ *\r
+ * \param BlockAddress Data block starting address for the write sequence\r
+ * \param TotalBlocks Number of blocks of data to write\r
+ * \param BufferPtr Pointer to the data source RAM buffer\r
+ */\r
+void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+ /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+ }\r
+#endif\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, 0);\r
+ }\r
+ \r
+ /* Write one 16-byte chunk of data to the dataflash */\r
+ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+ Dataflash_SendByte(*(BufferPtr++));\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+\r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++; \r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter and reset the sub block counter */\r
+ TotalBlocks--;\r
+ }\r
+\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ * the a preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read\r
+ * the files stored on the dataflash.\r
+ *\r
+ * \param BlockAddress Data block starting address for the read sequence\r
+ * \param TotalBlocks Number of blocks of data to read\r
+ * \param BufferPtr Pointer to the data destination RAM buffer\r
+ */\r
+void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+\r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ \r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ } \r
+\r
+ /* Read one 16-byte chunk of data from the dataflash */\r
+ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+ *(BufferPtr++) = Dataflash_ReceiveByte();\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+ \r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter */\r
+ TotalBlocks--;\r
+ }\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Disables the dataflash memory write protection bits on the board Dataflash ICs, if enabled. */\r
+void DataflashManager_ResetDataflashProtections(void)\r
+{\r
+ /* Select first dataflash chip, send the read status register command */\r
+ Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+ Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+ \r
+ /* Check if sector protection is enabled */\r
+ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+ {\r
+ Dataflash_ToggleSelectedChipCS();\r
+\r
+ /* Send the commands to disable sector protection */\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+ }\r
+ \r
+ /* Select second dataflash chip (if present on selected board), send read status register command */\r
+ #if (DATAFLASH_TOTALCHIPS == 2)\r
+ Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+ Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+ \r
+ /* Check if sector protection is enabled */\r
+ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+ {\r
+ Dataflash_ToggleSelectedChipCS();\r
+\r
+ /* Send the commands to disable sector protection */\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+ }\r
+ #endif\r
+ \r
+ /* Deselect current dataflash chip */\r
+ Dataflash_DeselectChip();\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for DataflashManager.c.\r
+ */\r
+ \r
+#ifndef _DATAFLASH_MANAGER_H\r
+#define _DATAFLASH_MANAGER_H\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ \r
+ #include "MassStorage.h"\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Common/Common.h> // Function Attribute, Atomic, Debug and ISR Macros\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Dataflash.h> // Dataflash chip driver\r
+\r
+ /* Preprocessor Checks: */\r
+ #if (DATAFLASH_PAGE_SIZE % 16)\r
+ #error Dataflash page size must be a multiple of 16 bytes.\r
+ #endif\r
+\r
+ /* Defines: */\r
+ /** Total number of bytes of the storage medium, comprised of one or more dataflash ICs. */\r
+ #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
+\r
+ /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
+ * storage media (Dataflash) using a different native block size.\r
+ */\r
+ #define VIRTUAL_MEMORY_BLOCK_SIZE 512\r
+ \r
+ /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */\r
+ #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
+ \r
+ /* Function Prototypes: */\r
+ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+ void DataflashManager_ResetDataflashProtections(void);\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage\r
+ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,\r
+ * which wrap around standard SCSI device commands for controlling the actual storage medium.\r
+ */\r
+ \r
+#define INCLUDE_FROM_SCSI_C\r
+#include "SCSI.h"\r
+\r
+/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's\r
+ * features and capabilities.\r
+ */\r
+SCSI_Inquiry_Response_t InquiryData = \r
+ {\r
+ .DeviceType = DEVICE_TYPE_BLOCK,\r
+ .PeripheralQualifier = 0,\r
+ \r
+ .Removable = true,\r
+ \r
+ .Version = 0,\r
+ \r
+ .ResponseDataFormat = 2,\r
+ .NormACA = false,\r
+ .TrmTsk = false,\r
+ .AERC = false,\r
+\r
+ .AdditionalLength = 0x1F,\r
+ \r
+ .SoftReset = false,\r
+ .CmdQue = false,\r
+ .Linked = false,\r
+ .Sync = false,\r
+ .WideBus16Bit = false,\r
+ .WideBus32Bit = false,\r
+ .RelAddr = false,\r
+ \r
+ .VendorID = "LUFA",\r
+ .ProductID = "Dataflash Disk",\r
+ .RevisionID = {'0','.','0','0'},\r
+ };\r
+\r
+/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE\r
+ * command is issued. This gives information on exactly why the last command failed to complete.\r
+ */\r
+SCSI_Request_Sense_Response_t SenseData =\r
+ {\r
+ .ResponseCode = 0x70,\r
+ .AdditionalLength = 0x0A,\r
+ };\r
+\r
+\r
+/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches\r
+ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns\r
+ * a command failure due to a ILLEGAL REQUEST.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
+ */\r
+bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+ bool CommandSuccess = false;\r
+\r
+ /* Run the appropriate SCSI command hander function based on the passed command */\r
+ switch (MSInterfaceInfo->CommandBlock.SCSICommandData[0])\r
+ {\r
+ case SCSI_CMD_INQUIRY:\r
+ CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo); \r
+ break;\r
+ case SCSI_CMD_REQUEST_SENSE:\r
+ CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);\r
+ break;\r
+ case SCSI_CMD_READ_CAPACITY_10:\r
+ CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo); \r
+ break;\r
+ case SCSI_CMD_SEND_DIAGNOSTIC:\r
+ CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo);\r
+ break;\r
+ case SCSI_CMD_WRITE_10:\r
+ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);\r
+ break;\r
+ case SCSI_CMD_READ_10:\r
+ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);\r
+ break;\r
+ case SCSI_CMD_TEST_UNIT_READY:\r
+ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:\r
+ case SCSI_CMD_VERIFY_10:\r
+ /* These commands should just succeed, no handling required */\r
+ CommandSuccess = true;\r
+ MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
+ break;\r
+ default:\r
+ /* Update the SENSE key to reflect the invalid command */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_INVALID_COMMAND,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+ break;\r
+ }\r
+\r
+ /* Check if command was successfully processed */\r
+ if (CommandSuccess)\r
+ {\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+ \r
+ return true;\r
+ }\r
+\r
+ return false;\r
+}\r
+\r
+/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features\r
+ * and capabilities to the host.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+ uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->CommandBlock.SCSICommandData[3] << 8) |\r
+ MSInterfaceInfo->CommandBlock.SCSICommandData[4]);\r
+ uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :\r
+ sizeof(InquiryData);\r
+\r
+ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */\r
+ if ((MSInterfaceInfo->CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||\r
+ MSInterfaceInfo->CommandBlock.SCSICommandData[2])\r
+ {\r
+ /* Optional but unsupported bits set - update the SENSE key and fail the request */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+ return false;\r
+ }\r
+ \r
+ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);\r
+\r
+ uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+ \r
+ /* Pad out remaining bytes with 0x00 */\r
+ Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Succeed the command and update the bytes transferred counter */\r
+ MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
+ \r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,\r
+ * including the error code and additional error information so that the host can determine why a command failed to complete.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+ uint8_t AllocationLength = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
+ uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);\r
+ \r
+ uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+\r
+ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NO_STREAM_CALLBACK);\r
+ Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
+ Endpoint_ClearIN();\r
+\r
+ /* Succeed the command and update the bytes transferred counter */\r
+ MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
+\r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity\r
+ * on the selected Logical Unit (drive), as a number of OS-sized blocks.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+ uint32_t TotalLUNs = (LUN_MEDIA_BLOCKS - 1);\r
+ uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE;\r
+\r
+ Endpoint_Write_Stream_BE(&TotalLUNs, sizeof(TotalLUNs), NO_STREAM_CALLBACK);\r
+ Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NO_STREAM_CALLBACK);\r
+ Endpoint_ClearIN();\r
+ \r
+ /* Succeed the command and update the bytes transferred counter */\r
+ MSInterfaceInfo->CommandBlock.DataTransferLength -= 8;\r
+ \r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the\r
+ * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is\r
+ * supported.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+ uint8_t ReturnByte;\r
+\r
+ /* Check to see if the SELF TEST bit is not set */\r
+ if (!(MSInterfaceInfo->CommandBlock.SCSICommandData[1] & (1 << 2)))\r
+ {\r
+ /* Only self-test supported - update SENSE key and fail the command */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+ return false;\r
+ }\r
+ \r
+ /* Test first Dataflash IC is present and responding to commands */\r
+ Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+ ReturnByte = Dataflash_ReceiveByte();\r
+ Dataflash_DeselectChip();\r
+\r
+ /* If returned data is invalid, fail the command */\r
+ if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+ {\r
+ /* Update SENSE key with a hardware error condition and return command fail */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+ SCSI_ASENSEQ_NO_QUALIFIER); \r
+ \r
+ return false;\r
+ }\r
+\r
+ #if (DATAFLASH_TOTALCHIPS == 2)\r
+ /* Test second Dataflash IC is present and responding to commands */\r
+ Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+ ReturnByte = Dataflash_ReceiveByte();\r
+ Dataflash_DeselectChip();\r
+\r
+ /* If returned data is invalid, fail the command */\r
+ if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+ {\r
+ /* Update SENSE key with a hardware error condition and return command fail */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+ SCSI_ASENSEQ_NO_QUALIFIER); \r
+ \r
+ return false;\r
+ }\r
+ #endif\r
+ \r
+ /* Succeed the command and update the bytes transferred counter */\r
+ MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
+ \r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address\r
+ * and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual\r
+ * reading and writing of the data.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
+ * \param IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead)\r
+{\r
+ uint32_t BlockAddress;\r
+ uint16_t TotalBlocks;\r
+ \r
+ /* Load in the 32-bit block address (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+ ((uint8_t*)&BlockAddress)[3] = MSInterfaceInfo->CommandBlock.SCSICommandData[2];\r
+ ((uint8_t*)&BlockAddress)[2] = MSInterfaceInfo->CommandBlock.SCSICommandData[3];\r
+ ((uint8_t*)&BlockAddress)[1] = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
+ ((uint8_t*)&BlockAddress)[0] = MSInterfaceInfo->CommandBlock.SCSICommandData[5];\r
+\r
+ /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+ ((uint8_t*)&TotalBlocks)[1] = MSInterfaceInfo->CommandBlock.SCSICommandData[7];\r
+ ((uint8_t*)&TotalBlocks)[0] = MSInterfaceInfo->CommandBlock.SCSICommandData[8];\r
+ \r
+ /* Check if the block address is outside the maximum allowable value for the LUN */\r
+ if (BlockAddress >= LUN_MEDIA_BLOCKS)\r
+ {\r
+ /* Block address is invalid, update SENSE key and return command fail */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+ return false;\r
+ }\r
+\r
+ #if (TOTAL_LUNS > 1)\r
+ /* Adjust the given block address to the real media address based on the selected LUN */\r
+ BlockAddress += ((uint32_t)MSInterfaceInfo->CommandBlock.LUN * LUN_MEDIA_BLOCKS);\r
+ #endif\r
+ \r
+ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */\r
+ if (IsDataRead == DATA_READ)\r
+ DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
+ else\r
+ DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
+\r
+ /* Update the bytes transferred counter and succeed the command */\r
+ MSInterfaceInfo->CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);\r
+ \r
+ return true;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for SCSI.c.\r
+ */\r
+ \r
+#ifndef _SCSI_H_\r
+#define _SCSI_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>\r
+\r
+ #include "MassStorage.h"\r
+ #include "Descriptors.h"\r
+ #include "DataflashManager.h"\r
+ #include "SCSI_Codes.h"\r
+ \r
+ /* Macros: */\r
+ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This\r
+ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about\r
+ * the last command failure) in a quick and easy manner.\r
+ *\r
+ * \param key New SCSI sense key to set the sense code to\r
+ * \param acode New SCSI additional sense key to set the additional sense code to\r
+ * \param aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to\r
+ */\r
+ #define SCSI_SET_SENSE(key, acode, aqual) MACROS{ SenseData.SenseKey = key; \\r
+ SenseData.AdditionalSenseCode = acode; \\r
+ SenseData.AdditionalSenseQualifier = aqual; }MACROE\r
+\r
+ /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */\r
+ #define DATA_READ true\r
+\r
+ /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */\r
+ #define DATA_WRITE false\r
+\r
+ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */\r
+ #define DEVICE_TYPE_BLOCK 0x00\r
+ \r
+ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */\r
+ #define DEVICE_TYPE_CDROM 0x05\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the\r
+ * structure contents, refer to the SCSI specifications.\r
+ */\r
+ typedef struct\r
+ {\r
+ unsigned char DeviceType : 5;\r
+ unsigned char PeripheralQualifier : 3;\r
+ \r
+ unsigned char _RESERVED1 : 7;\r
+ unsigned char Removable : 1;\r
+ \r
+ uint8_t Version;\r
+ \r
+ unsigned char ResponseDataFormat : 4;\r
+ unsigned char _RESERVED2 : 1;\r
+ unsigned char NormACA : 1;\r
+ unsigned char TrmTsk : 1;\r
+ unsigned char AERC : 1;\r
+\r
+ uint8_t AdditionalLength;\r
+ uint8_t _RESERVED3[2];\r
+\r
+ unsigned char SoftReset : 1;\r
+ unsigned char CmdQue : 1;\r
+ unsigned char _RESERVED4 : 1;\r
+ unsigned char Linked : 1;\r
+ unsigned char Sync : 1;\r
+ unsigned char WideBus16Bit : 1;\r
+ unsigned char WideBus32Bit : 1;\r
+ unsigned char RelAddr : 1;\r
+ \r
+ uint8_t VendorID[8];\r
+ uint8_t ProductID[16];\r
+ uint8_t RevisionID[4];\r
+ } SCSI_Inquiry_Response_t;\r
+ \r
+ /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the\r
+ * structure contents, refer to the SCSI specifications.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t ResponseCode;\r
+ \r
+ uint8_t SegmentNumber;\r
+ \r
+ unsigned char SenseKey : 4;\r
+ unsigned char _RESERVED1 : 1;\r
+ unsigned char ILI : 1;\r
+ unsigned char EOM : 1;\r
+ unsigned char FileMark : 1;\r
+ \r
+ uint8_t Information[4];\r
+ uint8_t AdditionalLength;\r
+ uint8_t CmdSpecificInformation[4];\r
+ uint8_t AdditionalSenseCode;\r
+ uint8_t AdditionalSenseQualifier;\r
+ uint8_t FieldReplaceableUnitCode;\r
+ uint8_t SenseKeySpecific[3];\r
+ } SCSI_Request_Sense_Response_t;\r
+ \r
+ /* Function Prototypes: */\r
+ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+ \r
+ #if defined(INCLUDE_FROM_SCSI_C)\r
+ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead);\r
+ #endif\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header containing macros for possible SCSI commands and SENSE data. Refer to\r
+ * the SCSI standard documentation for more information on each SCSI command and\r
+ * the SENSE data.\r
+ */\r
+ \r
+#ifndef _SCSI_CODES_H_\r
+#define _SCSI_CODES_H_\r
+\r
+ /* Macros: */\r
+ #define SCSI_CMD_INQUIRY 0x12\r
+ #define SCSI_CMD_REQUEST_SENSE 0x03\r
+ #define SCSI_CMD_TEST_UNIT_READY 0x00\r
+ #define SCSI_CMD_READ_CAPACITY_10 0x25\r
+ #define SCSI_CMD_SEND_DIAGNOSTIC 0x1D\r
+ #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E\r
+ #define SCSI_CMD_WRITE_10 0x2A\r
+ #define SCSI_CMD_READ_10 0x28\r
+ #define SCSI_CMD_WRITE_6 0x0A\r
+ #define SCSI_CMD_READ_6 0x08\r
+ #define SCSI_CMD_VERIFY_10 0x2F\r
+ #define SCSI_CMD_MODE_SENSE_6 0x1A\r
+ #define SCSI_CMD_MODE_SENSE_10 0x5A\r
+\r
+ #define SCSI_SENSE_KEY_GOOD 0x00\r
+ #define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01\r
+ #define SCSI_SENSE_KEY_NOT_READY 0x02\r
+ #define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03\r
+ #define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04\r
+ #define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05\r
+ #define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06\r
+ #define SCSI_SENSE_KEY_DATA_PROTECT 0x07\r
+ #define SCSI_SENSE_KEY_BLANK_CHECK 0x08\r
+ #define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09\r
+ #define SCSI_SENSE_KEY_COPY_ABORTED 0x0A\r
+ #define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B\r
+ #define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D\r
+ #define SCSI_SENSE_KEY_MISCOMPARE 0x0E\r
+\r
+ #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION 0x00\r
+ #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY 0x04\r
+ #define SCSI_ASENSE_INVALID_FIELD_IN_CDB 0x24\r
+ #define SCSI_ASENSE_WRITE_PROTECTED 0x27\r
+ #define SCSI_ASENSE_FORMAT_ERROR 0x31\r
+ #define SCSI_ASENSE_INVALID_COMMAND 0x20\r
+ #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21\r
+ #define SCSI_ASENSE_MEDIUM_NOT_PRESENT 0x3A\r
+\r
+ #define SCSI_ASENSEQ_NO_QUALIFIER 0x00\r
+ #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED 0x01\r
+ #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED 0x02\r
+ #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07\r
+\r
+#endif\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>MassStorage</ProjectName><Created>30-Sep-2008 14:12:09</Created><LastEdit>30-Sep-2008 14:12:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:12:09</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\Demos\MassStorage\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>DataflashManager.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MassStorage.c</SOURCEFILE><SOURCEFILE>SCSI.c</SOURCEFILE><HEADERFILE>DataflashManager.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MassStorage.h</HEADERFILE><HEADERFILE>SCSI.h</HEADERFILE><HEADERFILE>SCSI_Codes.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MassStorage.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the MassStorage demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "MassStorage.h"\r
+\r
+/** LUFA Mass Storage Class driver interface configuration and state information. This structure is\r
+ * passed to all Mass Storage Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_MS_t Disk_MS_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .DataINEndpointNumber = MASS_STORAGE_IN_EPNUM,\r
+ .DataINEndpointSize = MASS_STORAGE_IO_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = MASS_STORAGE_OUT_EPNUM,\r
+ .DataOUTEndpointSize = MASS_STORAGE_IO_EPSIZE,\r
+\r
+ .TotalLUNs = TOTAL_LUNS,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ USB_MS_USBTask(&Disk_MS_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
+ USB_Init();\r
+\r
+ /* Clear Dataflash sector protections, if enabled */\r
+ DataflashManager_ResetDataflashProtections();\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_MS_ConfigureEndpoints(&Disk_MS_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_MS_ProcessControlPacket(&Disk_MS_Interface);\r
+}\r
+\r
+/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed.\r
+ *\r
+ * \param MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced\r
+ */\r
+bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+ bool CommandSuccess;\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
+ CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ \r
+ return CommandSuccess;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for MassStorage.c.\r
+ */\r
+\r
+#ifndef _MASS_STORAGE_H_\r
+#define _MASS_STORAGE_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include "Lib/SCSI.h"\r
+ #include "Lib/DataflashManager.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
+ #define LEDMASK_USB_BUSY (LEDS_LED2)\r
+ \r
+ /** Total number of logical drives within the device - must be non-zero. */\r
+ #define TOTAL_LUNS 2\r
+ \r
+ /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */\r
+ #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Mass Storage Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Mass Storage Device</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Bulk-Only Transport</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Mass Storage Standard</td>\r
+ * <td>USB Bulk-Only Transport Standard</td>\r
+ * <td>SCSI Primary Commands Specification</td>\r
+ * <td>SCSI Block Commands Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Dual LUN Mass Storage demonstration application. This gives a simple\r
+ * reference application for implementing a multiple LUN USB Mass Storage\r
+ * device using the basic USB UFI drivers in all modern OSes (i.e. no\r
+ * special drivers required).\r
+ * \r
+ * On start-up the system will automatically enumerate and function as an\r
+ * external mass storage device with two LUNs (separate disks) which may\r
+ * be formatted and used in the same manner as commercial USB Mass Storage\r
+ * devices.\r
+ * \r
+ * You will need to format the mass storage drives upon first run of this\r
+ * demonstration - as the device acts only as a data block transport between\r
+ * the host and the storage media, it does not matter what file system is used,\r
+ * as the data interpretation is performed by the host and not the USB device.\r
+ * \r
+ * This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS\r
+ * value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to\r
+ * 255), with each LUN being allocated an equal portion of the available\r
+ * Dataflash memory.\r
+ *\r
+ * The USB control endpoint is managed entirely by the library using endpoint\r
+ * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for\r
+ * the host to reset the Mass Storage device state during long transfers without\r
+ * the need for complicated polling logic.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>TOTAL_LUNS</td>\r
+ * <td>MassStorage.h</td>\r
+ * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive\r
+ * - this can be set to any positive non-zero amount.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MassStorage\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ Lib/SCSI.c \\r
+ Lib/DataflashManager.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MassStorage.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax\r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x02, /* Usage (Mouse) */\r
+ 0xA1, 0x01, /* Collection (Application) */\r
+ 0x09, 0x01, /* Usage (Pointer) */\r
+ 0xA1, 0x00, /* Collection (Application) */\r
+ 0x95, 0x03, /* Report Count (3) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x09, /* Usage Page (Button) */\r
+ 0x19, 0x01, /* Usage Minimum (Button 1) */\r
+ 0x29, 0x03, /* Usage Maximum (Button 3) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x05, /* Report Size (5) */\r
+ 0x81, 0x01, /* Input (Constant) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop Control) */\r
+ 0x09, 0x30, /* Usage X */\r
+ 0x09, 0x31, /* Usage Y */\r
+ 0x15, 0x81, /* Logical Minimum (-127) */\r
+ 0x25, 0x7F, /* Logical Maximum (127) */\r
+ 0x81, 0x06, /* Input (Data, Variable, Relative) */\r
+ 0xC0, /* End Collection */\r
+ 0xC0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2041,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x02,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MouseHID = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(MouseReport)\r
+ },\r
+\r
+ .MouseEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = MOUSE_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ } \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Mouse Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration:\r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String:\r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00:\r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01:\r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02:\r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&MouseReport;\r
+ Size = sizeof(MouseReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address; \r
+ return Size;\r
+}\r
+\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t MouseHID;\r
+ USB_Descriptor_Endpoint_t MouseEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+ #define MOUSE_EPNUM 1\r
+ \r
+ /** Size in bytes of the Mouse HID reporting IN endpoint. */\r
+ #define MOUSE_EPSIZE 8\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>Mouse</ProjectName><Created>30-Sep-2008 14:13:52</Created><LastEdit>30-Sep-2008 14:14:08</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:52</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\Demos\Mouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Mouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Mouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Mouse.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Mouse demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Mouse.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ * passed to all HID Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Mouse_HID_Interface =\r
+ {\r
+ .InterfaceNumber = 0,\r
+\r
+ .ReportINEndpointNumber = MOUSE_EPNUM,\r
+ .ReportINEndpointSize = MOUSE_EPSIZE,\r
+\r
+ .ReportINBufferSize = sizeof(USB_MouseReport_Data_t),\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{ \r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ USB_HID_USBTask(&Mouse_HID_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+ USB_Init();\r
+\r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = ((F_CPU / 64) / 1000);\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ if (Mouse_HID_Interface.IdleMSRemaining)\r
+ Mouse_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report should be stored\r
+ *\r
+ * \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+ USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
+ \r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ MouseReport->Y = -1;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ MouseReport->Y = 1;\r
+\r
+ if (JoyStatus_LCL & JOY_RIGHT)\r
+ MouseReport->X = 1;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ MouseReport->X = -1;\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ MouseReport->Button = (1 << 0);\r
+ \r
+ if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+ MouseReport->Button |= (1 << 1);\r
+ \r
+ return sizeof(USB_MouseReport_Data_t);\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
+ * \param ReportData Pointer to a buffer where the created report has been stored\r
+ * \param ReportSize Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+ void* ReportData, uint16_t ReportSize)\r
+{\r
+ // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Mouse.c.\r
+ */\r
+\r
+#ifndef _MOUSE_H_\r
+#define _MOUSE_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/interrupt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+ \r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+ int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+ int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+ } USB_MouseReport_Data_t;\r
+ \r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+ void* ReportData, uint16_t ReportSize);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Mouse Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Mouse demonstration application. This gives a simple reference\r
+ * application for implementing a USB Mouse using the basic USB HID\r
+ * drivers in all modern OSes (i.e. no special drivers required). It is\r
+ * boot protocol compatible, and thus works under compatible BIOS as if\r
+ * it was a native mouse (e.g. PS/2).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a mouse when the USB connection to a host is present. To use\r
+ * the mouse, move the joystick to move the pointer, and push the\r
+ * joystick inwards to simulate a left-button click. The HWB serves as\r
+ * the right mouse button.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Mouse\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
+ \r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+#CFLAGS += -mshort-calls\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x02,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204C,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0xFF,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC_Functional_Header = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+ \r
+ .CDC_Functional_CallManagement= \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x00, 0x00}\r
+ },\r
+ \r
+ .CDC_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x00}\r
+ },\r
+ \r
+ .CDC_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+\r
+ .DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA RNDIS CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String:\r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00:\r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01:\r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02:\r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+ * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+ * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+ * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+ *\r
+ * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
+ */ \r
+ #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
+ struct \\r
+ { \\r
+ USB_Descriptor_Header_t Header; \\r
+ uint8_t SubType; \\r
+ uint8_t Data[DataSize]; \\r
+ }\r
+\r
+ /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPNUM 3\r
+\r
+ /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+ #define CDC_TX_EPNUM 1 \r
+\r
+ /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+ #define CDC_RX_EPNUM 2 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 64\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Header;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
+ USB_Descriptor_Endpoint_t ManagementEndpoint;\r
+ USB_Descriptor_Interface_t DCI_Interface;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - RNDIS Ethernet Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+; Windows LUFA RNDIS Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version]\r
+Signature = "$Windows NT$"\r
+Class = Net\r
+ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}\r
+Provider = %COMPANY%\r
+DriverVer = 06/21/2006,6.0.6000.16384\r
+;CatalogFile = device.cat\r
+\r
+[Manufacturer]\r
+%COMPANY% = RndisDevices,NTx86,NTamd64,NTia64\r
+\r
+; Decoration for x86 architecture\r
+[RndisDevices.NTx86]\r
+%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for x64 architecture\r
+[RndisDevices.NTamd64]\r
+%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for ia64 architecture\r
+[RndisDevices.NTia64]\r
+%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+;@@@ This is the common setting for setup\r
+[ControlFlags]\r
+ExcludeFromSelect=*\r
+\r
+; DDInstall section\r
+; References the in-build Netrndis.inf\r
+[RNDIS.NT.5.1]\r
+Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI\r
+BusType = 15\r
+; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF\r
+include = netrndis.inf\r
+needs = Usb_Rndis.ndi\r
+AddReg = Rndis_AddReg_Vista\r
+\r
+; DDInstal.Services section\r
+[RNDIS.NT.5.1.Services]\r
+include = netrndis.inf\r
+needs = Usb_Rndis.ndi.Services\r
+\r
+; No sys copyfiles - the sys files are already in-build \r
+; (part of the operating system).\r
+\r
+; Modify these strings for your device as needed.\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+RNDISDEV="LUFA USB RNDIS Demo"
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Address Resolution Protocol (ARP) packet handling routines. This protocol handles the\r
+ * conversion of physical MAC addresses to protocol IP addresses between the host and the\r
+ * device.\r
+ */\r
+ \r
+#include "ARP.h"\r
+\r
+/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if the host is requesting the IP or MAC address of the\r
+ * virtual server device on the network.\r
+ *\r
+ * \param InDataStart Pointer to the start of the incoming packet's ARP header\r
+ * \param OutDataStart Pointer to the start of the outgoing packet's ARP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+ DecodeARPHeader(InDataStart);\r
+\r
+ ARP_Header_t* ARPHeaderIN = (ARP_Header_t*)InDataStart;\r
+ ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart;\r
+\r
+ /* Ensure that the ARP request is a IPv4 request packet */\r
+ if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) &&\r
+ (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))\r
+ {\r
+ /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */\r
+ if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || \r
+ MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))\r
+ {\r
+ /* Fill out the ARP response header */\r
+ ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType;\r
+ ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType;\r
+ ARPHeaderOUT->HLEN = ARPHeaderIN->HLEN;\r
+ ARPHeaderOUT->PLEN = ARPHeaderIN->PLEN;\r
+ ARPHeaderOUT->Operation = SwapEndian_16(ARP_OPERATION_REPLY);\r
+\r
+ /* Copy over the sender MAC/IP to the target fields for the response */\r
+ ARPHeaderOUT->THA = ARPHeaderIN->SHA;\r
+ ARPHeaderOUT->TPA = ARPHeaderIN->SPA;\r
+\r
+ /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */\r
+ ARPHeaderOUT->SHA = ServerMACAddress;\r
+ ARPHeaderOUT->SPA = ServerIPAddress;\r
+\r
+ /* Return the size of the response so far */\r
+ return sizeof(ARP_Header_t);\r
+ }\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for ARP.c.\r
+ */\r
+ \r
+#ifndef _ARP_H_\r
+#define _ARP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** ARP header operation constant, indicating a request from a host for an address translation */\r
+ #define ARP_OPERATION_REQUEST 1\r
+\r
+ /** ARP header operation constant, indicating a reply from a host giving an address translation */\r
+ #define ARP_OPERATION_REPLY 2\r
+\r
+ /* Type Defines: */\r
+ /** Type define for an ARP packet inside an Ethernet frame. */\r
+ typedef struct\r
+ {\r
+ uint16_t HardwareType; /**< Hardware type constant, indicating the hardware used */\r
+ uint16_t ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */\r
+ \r
+ uint8_t HLEN; /**< Length in bytes of the source/destination hardware addresses */\r
+ uint8_t PLEN; /**< Length in bytes of the source/destination protocol addresses */\r
+ uint16_t Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */\r
+ \r
+ MAC_Address_t SHA; /**< Sender's hardware address */\r
+ IP_Address_t SPA; /**< Sender's protocol address */\r
+ MAC_Address_t THA; /**< Target's hardware address */\r
+ IP_Address_t TPA; /**< Target's protocol address */\r
+ } ARP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol\r
+ * handles the automatic IP negotiation to the host, so that the host will use the provided\r
+ * IP address given to it by the device.\r
+ */\r
+ \r
+#include "DHCP.h"\r
+\r
+/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if the host is requesting or accepting an IP address.\r
+ *\r
+ * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
+ * \param DHCPHeaderInStart Pointer to the start of the incoming packet's DHCP header\r
+ * \param DHCPHeaderOutStart Pointer to the start of the outgoing packet's DHCP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart)\r
+{\r
+ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart;\r
+ DHCP_Header_t* DHCPHeaderIN = (DHCP_Header_t*)DHCPHeaderInStart;\r
+ DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;\r
+ \r
+ uint8_t* DHCPOptionsINStart = (uint8_t*)(DHCPHeaderInStart + sizeof(DHCP_Header_t));\r
+ uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));\r
+\r
+ DecodeDHCPHeader(DHCPHeaderInStart);\r
+\r
+ /* Zero out the response DHCP packet, as much of it legacy and left at 0 */\r
+ memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t));\r
+\r
+ /* Fill out the response DHCP packet */\r
+ DHCPHeaderOUT->HardwareType = DHCPHeaderIN->HardwareType;\r
+ DHCPHeaderOUT->Operation = DHCP_OP_BOOTREPLY;\r
+ DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength;\r
+ DHCPHeaderOUT->Hops = 0;\r
+ DHCPHeaderOUT->TransactionID = DHCPHeaderIN->TransactionID;\r
+ DHCPHeaderOUT->ElapsedSeconds = 0;\r
+ DHCPHeaderOUT->Flags = DHCPHeaderIN->Flags;\r
+ DHCPHeaderOUT->YourIP = ClientIPAddress;\r
+ memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));\r
+ DHCPHeaderOUT->Cookie = SwapEndian_32(DHCP_MAGIC_COOKIE);\r
+ \r
+ /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that\r
+ when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */\r
+ IPHeaderIN->SourceAddress = ClientIPAddress;\r
+ IPHeaderIN->DestinationAddress = ServerIPAddress;\r
+\r
+ /* Process the incoming DHCP packet options */\r
+ while (DHCPOptionsINStart[0] != DHCP_OPTION_END)\r
+ { \r
+ /* Find the Message Type DHCP option, to determine the type of DHCP packet */\r
+ if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)\r
+ {\r
+ if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST))\r
+ {\r
+ /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE;\r
+ *(DHCPOptionsOUTStart++) = 1;\r
+ *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER\r
+ : DHCP_MESSAGETYPE_ACK;\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;\r
+ *(DHCPOptionsOUTStart++) = 4;\r
+ *(DHCPOptionsOUTStart++) = 0xFF;\r
+ *(DHCPOptionsOUTStart++) = 0xFF;\r
+ *(DHCPOptionsOUTStart++) = 0xFF;\r
+ *(DHCPOptionsOUTStart++) = 0x00;\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER;\r
+ *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);\r
+ memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t));\r
+ DHCPOptionsOUTStart += sizeof(IP_Address_t);\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;\r
+ \r
+ return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));\r
+ }\r
+ }\r
+ \r
+ /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */\r
+ DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for DHCP.c.\r
+ */\r
+ \r
+#ifndef _DHCP_H_\r
+#define _DHCP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+\r
+ /* Macros: */\r
+ /** DHCP operation constant, indicating a request from a host to a DHCP server */\r
+ #define DHCP_OP_BOOTREQUEST 0x01\r
+\r
+ /** DHCP operation constant, indicating a reply from a DHCP server to a host */\r
+ #define DHCP_OP_BOOTREPLY 0x02\r
+ \r
+ /** Hardware type constant, indicating Ethernet as a carrier */\r
+ #define DHCP_HTYPE_ETHERNET 0x01\r
+ \r
+ /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP) */\r
+ #define DHCP_MAGIC_COOKIE 0x63825363\r
+ \r
+ /** DHCP option list entry header, indicating that a subnet mask will follow */\r
+ #define DHCP_OPTION_SUBNETMASK 1\r
+\r
+ /** DHCP option list entry header, indicating that the DHCP message type constant will follow */\r
+ #define DHCP_OPTION_MESSAGETYPE 53\r
+\r
+ /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow */\r
+ #define DHCP_OPTION_DHCPSERVER 54\r
+\r
+ /** DHCP option list entry header, used to pad out option data */\r
+ #define DHCP_OPTION_PAD 0\r
+\r
+ /** DHCP option list entry header, indicating the end of option data */\r
+ #define DHCP_OPTION_END 255\r
+ \r
+ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address */\r
+ #define DHCP_MESSAGETYPE_DISCOVER 1\r
+\r
+ /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address */\r
+ #define DHCP_MESSAGETYPE_OFFER 2\r
+\r
+ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address */\r
+ #define DHCP_MESSAGETYPE_REQUEST 3\r
+\r
+ /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease */\r
+ #define DHCP_MESSAGETYPE_DECLINE 4\r
+\r
+ /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request */\r
+ #define DHCP_MESSAGETYPE_ACK 5\r
+\r
+ /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request */\r
+ #define DHCP_MESSAGETYPE_NACK 6\r
+\r
+ /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address */\r
+ #define DHCP_MESSAGETYPE_RELEASE 7\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a DHCP packet inside an Ethernet frame. */\r
+ typedef struct\r
+ {\r
+ uint8_t Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */\r
+ uint8_t HardwareType; /**< Hardware carrier type constant */\r
+ uint8_t HardwareAddressLength; /**< Length in bytes of a hardware (MAC) address on the network */\r
+ uint8_t Hops; /**< Number of hops required to reach the server, unused */\r
+\r
+ uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */\r
+\r
+ uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */\r
+ uint16_t Flags; /**< BOOTP packet flags */\r
+ \r
+ IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */\r
+ IP_Address_t YourIP; /**< Client IP address */\r
+ IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ \r
+ uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */\r
+ uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ \r
+ uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */\r
+ } DHCP_Header_t;\r
+\r
+ /* Function Prototypes: */\r
+ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet\r
+ * frames sent and received, deferring the processing of subpacket protocols to the appropriate\r
+ * protocol handlers, such as DHCP or ARP.\r
+ */\r
+ \r
+#include "Ethernet.h"\r
+\r
+/* Global Variables: */\r
+/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
+const MAC_Address_t ServerMACAddress = {SERVER_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */\r
+const IP_Address_t ServerIPAddress = {SERVER_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */\r
+const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */\r
+const IP_Address_t BroadcastIPAddress = {BROADCAST_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */\r
+const IP_Address_t ClientIPAddress = {CLIENT_IP_ADDRESS};\r
+\r
+\r
+/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
+ * frame buffer if the sub protocol handlers create a valid response.\r
+ */\r
+void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT)\r
+{\r
+ DecodeEthernetFrameHeader(FrameIN->FrameData);\r
+\r
+ /* Cast the incoming Ethernet frame to the Ethernet header type */\r
+ Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;\r
+ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;\r
+ \r
+ int16_t RetSize = NO_RESPONSE;\r
+ \r
+ /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
+ if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
+ MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)))\r
+ {\r
+ /* Process the packet depending on its protocol */\r
+ switch (SwapEndian_16(FrameINHeader->EtherType))\r
+ {\r
+ case ETHERTYPE_ARP:\r
+ RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+ &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+ break; \r
+ case ETHERTYPE_IPV4:\r
+ RetSize = IP_ProcessIPPacket(FrameIN,\r
+ &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+ &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+ break;\r
+ }\r
+ \r
+ /* Protocol processing routine has filled a response, complete the ethernet frame header */\r
+ if (RetSize > 0)\r
+ {\r
+ /* Fill out the response Ethernet frame header */\r
+ FrameOUTHeader->Source = ServerMACAddress;\r
+ FrameOUTHeader->Destination = FrameINHeader->Source;\r
+ FrameOUTHeader->EtherType = FrameINHeader->EtherType;\r
+ \r
+ /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+ FrameOUT->FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
+ FrameOUT->FrameInBuffer = true;\r
+ }\r
+ }\r
+\r
+ /* Check if the packet was processed */\r
+ if (RetSize != NO_PROCESS)\r
+ {\r
+ /* Clear the frame buffer */\r
+ FrameIN->FrameInBuffer = false;\r
+ }\r
+}\r
+\r
+/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's\r
+ * compliment of each word, complimented.\r
+ *\r
+ * \param Data Pointer to the packet buffer data whose checksum must be calculated\r
+ * \param Bytes Number of bytes in the data buffer to process\r
+ *\r
+ * \return A 16-bit Ethernet checksum value\r
+ */\r
+uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes)\r
+{\r
+ uint16_t* Words = (uint16_t*)Data;\r
+ uint32_t Checksum = 0;\r
+\r
+ for (uint8_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)\r
+ Checksum += Words[CurrWord];\r
+ \r
+ while (Checksum & 0xFFFF0000)\r
+ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+ \r
+ return ~Checksum;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Ethernet.c.\r
+ */\r
+ \r
+#ifndef _ETHERNET_H_\r
+#define _ETHERNET_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
+\r
+ #include "EthernetProtocols.h"\r
+ #include "ProtocolDecoders.h"\r
+ #include "ICMP.h"\r
+ #include "TCP.h"\r
+ #include "UDP.h"\r
+ #include "DHCP.h"\r
+ #include "ARP.h"\r
+ #include "IP.h"\r
+ \r
+ /* Macros: */\r
+ /** Physical MAC address of the USB RNDIS network adapter */\r
+ #define ADAPTER_MAC_ADDRESS {0x00, 0x02, 0x00, 0x02, 0x00, 0x02} \r
+\r
+ /** Physical MAC address of the virtual server on the network */\r
+ #define SERVER_MAC_ADDRESS {0x00, 0x01, 0x00, 0x01, 0x00, 0x01} \r
+\r
+ /** Physical MAC address of the network broadcast address */\r
+ #define BROADCAST_MAC_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
+ \r
+ /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
+ * \r
+ * \param MAC1 First MAC address\r
+ * \param MAC2 Second MAC address\r
+ *\r
+ * \return True if the addresses match, false otherwise\r
+ */\r
+ #define MAC_COMPARE(MAC1, MAC2) (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
+ \r
+ /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
+ #define NO_RESPONSE 0 \r
+\r
+ /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
+ #define NO_PROCESS -1\r
+\r
+ /* Type Defines: */\r
+ /** Type define for an Ethernet frame header */\r
+ typedef struct\r
+ {\r
+ MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
+ MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
+ \r
+ union\r
+ {\r
+ uint16_t EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
+ uint16_t Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
+ };\r
+ } Ethernet_Frame_Header_t;\r
+ \r
+ /* External Variables: */\r
+ extern const MAC_Address_t ServerMACAddress;\r
+ extern const IP_Address_t ServerIPAddress;\r
+ extern const MAC_Address_t BroadcastMACAddress;\r
+ extern const IP_Address_t BroadcastIPAddress;\r
+ extern const IP_Address_t ClientIPAddress;\r
+ \r
+ /* Function Prototypes: */\r
+ void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT);\r
+ uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * General Ethernet protocol constants and type defines, for use by\r
+ * all network protocol portions of the TCP/IP stack.\r
+ */\r
+\r
+#ifndef _ETHERNET_PROTOCOLS_H_\r
+#define _ETHERNET_PROTOCOLS_H_\r
+\r
+ /* Macros: */\r
+ #define ETHERTYPE_IPV4 0x0800\r
+ #define ETHERTYPE_ARP 0x0806\r
+ #define ETHERTYPE_RARP 0x8035\r
+ #define ETHERTYPE_APPLETALK 0x809b\r
+ #define ETHERTYPE_APPLETALKARP 0x80f3\r
+ #define ETHERTYPE_IEEE8021Q 0x8100\r
+ #define ETHERTYPE_NOVELLIPX 0x8137\r
+ #define ETHERTYPE_NOVELL 0x8138\r
+ #define ETHERTYPE_IPV6 0x86DD\r
+ #define ETHERTYPE_COBRANET 0x8819\r
+ #define ETHERTYPE_PROVIDERBRIDGING 0x88a8\r
+ #define ETHERTYPE_MPLSUNICAST 0x8847\r
+ #define ETHERTYPE_MPLSMULTICAST 0x8848\r
+ #define ETHERTYPE_PPPoEDISCOVERY 0x8863\r
+ #define ETHERTYPE_PPPoESESSION 0x8864\r
+ #define ETHERTYPE_EAPOVERLAN 0x888E\r
+ #define ETHERTYPE_HYPERSCSI 0x889A\r
+ #define ETHERTYPE_ATAOVERETHERNET 0x88A2\r
+ #define ETHERTYPE_ETHERCAT 0x88A4\r
+ #define ETHERTYPE_SERCOSIII 0x88CD\r
+ #define ETHERTYPE_CESoE 0x88D8\r
+ #define ETHERTYPE_MACSECURITY 0x88E5\r
+ #define ETHERTYPE_FIBRECHANNEL 0x8906\r
+ #define ETHERTYPE_QINQ 0x9100\r
+ #define ETHERTYPE_VLLT 0xCAFE\r
+ \r
+ #define PROTOCOL_ICMP 1\r
+ #define PROTOCOL_IGMP 2\r
+ #define PROTOCOL_TCP 6\r
+ #define PROTOCOL_UDP 17\r
+ #define PROTOCOL_OSPF 89\r
+ #define PROTOCOL_SCTP 132\r
+\r
+ /* Type Defines: */ \r
+ /** Type define for a protocol IP address of a device on a network */\r
+ typedef struct\r
+ {\r
+ uint8_t Octets[4]; /**< Individual bytes of an IP address */\r
+ } IP_Address_t;\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles\r
+ * Echo requests from the host, to indicate a successful network connection between the host\r
+ * and the virtual server.\r
+ */\r
+ \r
+#include "ICMP.h"\r
+\r
+/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if the host is issuing a ICMP ECHO request.\r
+ *\r
+ * \param FrameIN Pointer to the incomming Ethernet frame information structure\r
+ * \param InDataStart Pointer to the start of the incoming packet's ICMP header\r
+ * \param OutDataStart Pointer to the start of the outgoing packet's ICMP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
+{\r
+ ICMP_Header_t* ICMPHeaderIN = (ICMP_Header_t*)InDataStart;\r
+ ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart;\r
+\r
+ DecodeICMPHeader(InDataStart);\r
+\r
+ /* Determine if the ICMP packet is an echo request (ping) */\r
+ if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST)\r
+ {\r
+ /* Fill out the ICMP response packet */\r
+ ICMPHeaderOUT->Type = ICMP_TYPE_ECHOREPLY;\r
+ ICMPHeaderOUT->Code = 0;\r
+ ICMPHeaderOUT->Checksum = 0;\r
+ ICMPHeaderOUT->Id = ICMPHeaderIN->Id;\r
+ ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;\r
+ \r
+ uint16_t DataSize = FrameIN->FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN->FrameData));\r
+ \r
+ /* Copy the remaining payload to the response - echo requests should echo back any sent data */\r
+ memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],\r
+ &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],\r
+ DataSize);\r
+\r
+ ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));\r
+\r
+ /* Return the size of the response so far */\r
+ return (DataSize + sizeof(ICMP_Header_t));\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for ICMP.c.\r
+ */\r
+\r
+#ifndef _ICMP_H_\r
+#define _ICMP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** ICMP message type constant, indicating an ICMP ECHO Reply message */\r
+ #define ICMP_TYPE_ECHOREPLY 0\r
+\r
+ /** ICMP message type constant, indicating a packet destination is unreachable */\r
+ #define ICMP_TYPE_DESTINATIONUNREACHABLE 3\r
+ \r
+ /** ICMP message type constant, indicating an ICMP Source Quench message */\r
+ #define ICMP_TYPE_SOURCEQUENCH 4\r
+\r
+ /** ICMP message type constant, indicating an ICMP Redirect message */\r
+ #define ICMP_TYPE_REDIRECTMESSAGE 5\r
+\r
+ /** ICMP message type constant, indicating an ICMP ECHO Request message */\r
+ #define ICMP_TYPE_ECHOREQUEST 8\r
+\r
+ /** ICMP message type constant, indicating an ICMP Time Exceeded message */\r
+ #define ICMP_TYPE_TIMEEXCEEDED 11\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for an ICMP message header. */\r
+ typedef struct\r
+ {\r
+ uint8_t Type; /**< ICMP message type, a ICMP_TYPE_* constant */\r
+ uint8_t Code; /**< ICMP message code, indicating the message value */\r
+ uint16_t Checksum; /**< Ethernet checksum of the ICMP message */\r
+ uint16_t Id; /**< Id of the ICMP message */\r
+ uint16_t Sequence; /**< Sequence number of the ICMP message, to link together message responses */\r
+ } ICMP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the\r
+ * host which typically encapsulate other protocols such as ICMP, UDP and TCP.\r
+ */\r
+ \r
+#include "IP.h"\r
+\r
+/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if one is created by a subprotocol handler.\r
+ *\r
+ * \param FrameIN Pointer to the incomming Ethernet frame information structure\r
+ * \param InDataStart Pointer to the start of the incoming packet's IP header\r
+ * \param OutDataStart Pointer to the start of the outgoing packet's IP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ * response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ * next Ethernet packet handler iteration\r
+ */\r
+int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
+{\r
+ DecodeIPHeader(InDataStart);\r
+\r
+ IP_Header_t* IPHeaderIN = (IP_Header_t*)InDataStart;\r
+ IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart;\r
+\r
+ /* Header length is specified in number of longs in the packet header, convert to bytes */\r
+ uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+\r
+ int16_t RetSize = NO_RESPONSE;\r
+\r
+ /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */\r
+ if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) &&\r
+ !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress)))\r
+ {\r
+ return NO_RESPONSE;\r
+ }\r
+ \r
+ /* Pass off the IP payload to the appropriate protocol processing routine */\r
+ switch (IPHeaderIN->Protocol)\r
+ {\r
+ case PROTOCOL_ICMP:\r
+ RetSize = ICMP_ProcessICMPPacket(FrameIN,\r
+ &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);\r
+ break;\r
+ case PROTOCOL_TCP:\r
+ RetSize = TCP_ProcessTCPPacket(InDataStart,\r
+ &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); \r
+ break;\r
+ case PROTOCOL_UDP:\r
+ RetSize = UDP_ProcessUDPPacket(InDataStart,\r
+ &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); \r
+ break;\r
+ }\r
+ \r
+ /* Check to see if the protocol processing routine has filled out a response */\r
+ if (RetSize > 0)\r
+ {\r
+ /* Fill out the response IP packet header */\r
+ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + RetSize);\r
+ IPHeaderOUT->TypeOfService = 0;\r
+ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+ IPHeaderOUT->Version = 4;\r
+ IPHeaderOUT->Flags = 0;\r
+ IPHeaderOUT->FragmentOffset = 0;\r
+ IPHeaderOUT->Identification = 0;\r
+ IPHeaderOUT->HeaderChecksum = 0;\r
+ IPHeaderOUT->Protocol = IPHeaderIN->Protocol;\r
+ IPHeaderOUT->TTL = DEFAULT_TTL;\r
+ IPHeaderOUT->SourceAddress = IPHeaderIN->DestinationAddress;\r
+ IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;\r
+ \r
+ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+ \r
+ /* Return the size of the response so far */\r
+ return (sizeof(IP_Header_t) + RetSize);\r
+ }\r
+ \r
+ return RetSize;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for IP.c.\r
+ */\r
+ \r
+#ifndef _IP_H_\r
+#define _IP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** Protocol IP address of the host (client) machine, once assigned by DHCP */\r
+ #define CLIENT_IP_ADDRESS { 10, 0, 0, 1}\r
+\r
+ /** Protocol IP address of the virtual server machine */\r
+ #define SERVER_IP_ADDRESS { 10, 0, 0, 2}\r
+\r
+ /** Protocol IP address of the broadcast address */\r
+ #define BROADCAST_IP_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF}\r
+\r
+ /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination is reached */\r
+ #define DEFAULT_TTL 128\r
+ \r
+ /** Performs a comparison between two IP addresses, indicating if they are identical.\r
+ * \r
+ * \param IP1 First IP address\r
+ * \param IP2 Second IP address\r
+ *\r
+ * \return True if the addresses match, false otherwise\r
+ */\r
+ #define IP_COMPARE(IP1, IP2) (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)\r
+ \r
+ /* Type Defines: */\r
+ /** Type define of an IP packet header. */\r
+ typedef struct\r
+ {\r
+ unsigned char HeaderLength : 4; /**< Total length of the packet header, in 4-byte blocks */\r
+ unsigned char Version : 4; /**< IP protocol version */\r
+ uint8_t TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */\r
+ uint16_t TotalLength; /**< Total length of the IP packet, in bytes */\r
+\r
+ uint16_t Identification; /**< Identification value for identifying fragmented packets */\r
+ unsigned int FragmentOffset : 13; /**< Offset of this IP fragment */\r
+ unsigned int Flags : 3; /**< Fragment flags, to indicate if a packet is fragmented */\r
+\r
+ uint8_t TTL; /**< Maximum allowable number of hops to reach the packet destination */\r
+ uint8_t Protocol; /**< Encapsulated protocol type */\r
+ uint16_t HeaderChecksum; /**< Ethernet checksum of the IP header */\r
+ \r
+ IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */\r
+ IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */\r
+ } IP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines\r
+ accepts a header to the appropriate protocol and prints out pertinent information\r
+ on the packet through the serial port.\r
+ \r
+ To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}\r
+ in the project makefile, and pass it to the compiler using the -D switch.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes.\r
+ * Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human\r
+ * readable format.\r
+ *\r
+ * Note that the USART is a slow transmission medium, and will slow down packet processing considerably.\r
+ * Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile\r
+ * and passing it to the compiler via the -D switch.\r
+ */\r
+ \r
+#include "ProtocolDecoders.h"\r
+\r
+/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an Ethernet frame header\r
+ */\r
+void DecodeEthernetFrameHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_ETHERNET)\r
+ Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;\r
+ \r
+ printf_P(PSTR("\r\n"));\r
+ \r
+ printf_P(PSTR(" ETHERNET\r\n"));\r
+ printf_P(PSTR(" + Frame Size: %u\r\n"), FrameIN.FrameLength);\r
+\r
+ if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) &&\r
+ !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress)))\r
+ {\r
+ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
+ return;\r
+ }\r
+\r
+ printf_P(PSTR(" + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0],\r
+ FrameHeader->Source.Octets[1],\r
+ FrameHeader->Source.Octets[2],\r
+ FrameHeader->Source.Octets[3],\r
+ FrameHeader->Source.Octets[4],\r
+ FrameHeader->Source.Octets[5]);\r
+\r
+ printf_P(PSTR(" + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Destination.Octets[0],\r
+ FrameHeader->Destination.Octets[1],\r
+ FrameHeader->Destination.Octets[2],\r
+ FrameHeader->Destination.Octets[3],\r
+ FrameHeader->Destination.Octets[4],\r
+ FrameHeader->Destination.Octets[5]);\r
+\r
+ if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)\r
+ printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));\r
+ else\r
+ printf_P(PSTR(" + Protocol: UNKNOWN E1\r\n"));\r
+ #endif\r
+}\r
+\r
+/** Decodes an ARP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an ARP packet header\r
+ */\r
+void DecodeARPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_ARP)\r
+ ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart; \r
+\r
+ printf_P(PSTR(" \\\r\n ARP\r\n"));\r
+\r
+ if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) &&\r
+ !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))\r
+ {\r
+ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
+ return; \r
+ }\r
+\r
+ printf_P(PSTR(" + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));\r
+ printf_P(PSTR(" + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));\r
+ \r
+ if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)\r
+ {\r
+ printf_P(PSTR(" + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],\r
+ ARPHeader->SHA.Octets[1],\r
+ ARPHeader->SHA.Octets[2],\r
+ ARPHeader->SHA.Octets[3],\r
+ ARPHeader->SHA.Octets[4],\r
+ ARPHeader->SHA.Octets[5]);\r
+\r
+ printf_P(PSTR(" + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0],\r
+ ARPHeader->SPA.Octets[1],\r
+ ARPHeader->SPA.Octets[2],\r
+ ARPHeader->SPA.Octets[3]);\r
+\r
+ printf_P(PSTR(" + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0],\r
+ ARPHeader->THA.Octets[1],\r
+ ARPHeader->THA.Octets[2],\r
+ ARPHeader->THA.Octets[3],\r
+ ARPHeader->THA.Octets[4],\r
+ ARPHeader->THA.Octets[5]);\r
+\r
+ printf_P(PSTR(" + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0],\r
+ ARPHeader->TPA.Octets[1],\r
+ ARPHeader->TPA.Octets[2],\r
+ ARPHeader->TPA.Octets[3]);\r
+ }\r
+ #endif\r
+}\r
+\r
+/** Decodes an IP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an IP packet header\r
+ */\r
+void DecodeIPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_IP)\r
+ IP_Header_t* IPHeader = (IP_Header_t*)InDataStart;\r
+\r
+ uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t));\r
+\r
+ printf_P(PSTR(" \\\r\n IP\r\n"));\r
+\r
+ if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress)))\r
+ {\r
+ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
+ return;\r
+ }\r
+\r
+ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+ printf_P(PSTR(" + Packet Version: %u\r\n"), IPHeader->Version);\r
+ printf_P(PSTR(" + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));\r
+ \r
+ printf_P(PSTR(" + Protocol: %u\r\n"), IPHeader->Protocol);\r
+ printf_P(PSTR(" + TTL: %u\r\n"), IPHeader->TTL);\r
+ \r
+ printf_P(PSTR(" + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],\r
+ IPHeader->SourceAddress.Octets[1],\r
+ IPHeader->SourceAddress.Octets[2],\r
+ IPHeader->SourceAddress.Octets[3]); \r
+\r
+ printf_P(PSTR(" + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],\r
+ IPHeader->DestinationAddress.Octets[1],\r
+ IPHeader->DestinationAddress.Octets[2],\r
+ IPHeader->DestinationAddress.Octets[3]);\r
+ #endif\r
+}\r
+\r
+/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an ICMP packet header\r
+ */\r
+void DecodeICMPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_ICMP)\r
+ ICMP_Header_t* ICMPHeader = (ICMP_Header_t*)InDataStart;\r
+\r
+ printf_P(PSTR(" \\\r\n ICMP\r\n"));\r
+\r
+ printf_P(PSTR(" + Type: %u\r\n"), ICMPHeader->Type);\r
+ printf_P(PSTR(" + Code: %u\r\n"), ICMPHeader->Code);\r
+ #endif\r
+}\r
+\r
+/** Decodes a TCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of a TCP packet header\r
+ */\r
+void DecodeTCPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_TCP)\r
+ TCP_Header_t* TCPHeader = (TCP_Header_t*)InDataStart;\r
+\r
+ uint16_t HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t));\r
+\r
+ printf_P(PSTR(" \\\r\n TCP\r\n"));\r
+\r
+ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+\r
+ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort));\r
+ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort));\r
+\r
+ printf_P(PSTR(" + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));\r
+ printf_P(PSTR(" + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));\r
+ \r
+ printf_P(PSTR(" + Flags: 0x%02X\r\n"), TCPHeader->Flags);\r
+ \r
+ if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)\r
+ printf_P(PSTR(" + NOT LISTENING ON DESTINATION PORT\r\n"));\r
+ #endif\r
+}\r
+\r
+/** Decodes an UDP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of a UDP packet header\r
+ */\r
+void DecodeUDPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_UDP)\r
+ UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart;\r
+\r
+ printf_P(PSTR(" \\\r\n UDP\r\n"));\r
+\r
+ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort));\r
+ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort));\r
+\r
+ printf_P(PSTR(" + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length));\r
+ #endif\r
+}\r
+\r
+/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of a DHCP packet header\r
+ */\r
+void DecodeDHCPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_DHCP)\r
+ uint8_t* DHCPOptions = (InDataStart + sizeof(DHCP_Header_t));\r
+\r
+ printf_P(PSTR(" \\\r\n DHCP\r\n"));\r
+\r
+ while (DHCPOptions[0] != DHCP_OPTION_END)\r
+ {\r
+ if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE)\r
+ {\r
+ switch (DHCPOptions[2])\r
+ {\r
+ case DHCP_MESSAGETYPE_DISCOVER:\r
+ printf_P(PSTR(" + DISCOVER\r\n"));\r
+ break;\r
+ case DHCP_MESSAGETYPE_REQUEST:\r
+ printf_P(PSTR(" + REQUEST\r\n"));\r
+ break;\r
+ case DHCP_MESSAGETYPE_RELEASE:\r
+ printf_P(PSTR(" + RELEASE\r\n"));\r
+ break;\r
+ case DHCP_MESSAGETYPE_DECLINE:\r
+ printf_P(PSTR(" + DECLINE\r\n"));\r
+ break;\r
+ }\r
+ }\r
+ \r
+ DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));\r
+ }\r
+\r
+ #endif\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for ProtocolDecoders.c.\r
+ */\r
+\r
+#ifndef _PROTOCOL_DECODERS_H_\r
+#define _PROTOCOL_DECODERS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ \r
+ #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ \r
+ /* Function Prototypes: */\r
+ void DecodeEthernetFrameHeader(void* InDataStart);\r
+ void DecodeARPHeader(void* InDataStart);\r
+ void DecodeIPHeader(void* InDataStart);\r
+ void DecodeICMPHeader(void* InDataStart);\r
+ void DecodeTCPHeader(void* InDataStart);\r
+ void DecodeUDPHeader(void* InDataStart);\r
+ void DecodeDHCPHeader(void* InDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission\r
+ * and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data\r
+ * delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.\r
+ */\r
+ \r
+#define INCLUDE_FROM_TCP_C\r
+#include "TCP.h"\r
+\r
+/* Global Variables: */\r
+/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are\r
+ * stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This\r
+ * allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired.\r
+ */\r
+TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active\r
+ * (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections\r
+ * not present in the array are closed.\r
+ */\r
+TCP_ConnectionState_t ConnectionStateTable[MAX_TCP_CONNECTIONS];\r
+\r
+\r
+/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application\r
+ * level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
+ * buffer for later transmission.\r
+ */\r
+void TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
+{\r
+ /* Task to hand off TCP packets to and from the listening applications. */\r
+\r
+ /* Run each application in sequence, to process incoming and generate outgoing packets */\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find the corresponding port entry in the port table */\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Run the application handler for the port */\r
+ if ((PortStateTable[PTableEntry].Port == ConnectionStateTable[CSTableEntry].Port) && \r
+ (PortStateTable[PTableEntry].State == TCP_Port_Open))\r
+ {\r
+ PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], &ConnectionStateTable[CSTableEntry].Info.Buffer);\r
+ }\r
+ }\r
+ }\r
+ \r
+ /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */\r
+ if (RNDISInterfaceInfo->FrameOUT.FrameInBuffer)\r
+ return;\r
+ \r
+ /* Send response packets from each application as the TCP packet buffers are filled by the applications */\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* For each completely received packet, pass it along to the listening application */\r
+ if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) &&\r
+ (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready))\r
+ {\r
+ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData;\r
+ IP_Header_t* IPHeaderOUT = (IP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)];\r
+ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+ sizeof(IP_Header_t)]; \r
+ void* TCPDataOUT = &RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+ sizeof(IP_Header_t) +\r
+ sizeof(TCP_Header_t)];\r
+\r
+ uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length;\r
+\r
+ /* Fill out the TCP data */\r
+ TCPHeaderOUT->SourcePort = ConnectionStateTable[CSTableEntry].Port;\r
+ TCPHeaderOUT->DestinationPort = ConnectionStateTable[CSTableEntry].RemotePort;\r
+ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut);\r
+ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn);\r
+ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE);\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ TCPHeaderOUT->UrgentPointer = 0;\r
+ TCPHeaderOUT->Checksum = 0;\r
+ TCPHeaderOUT->Reserved = 0;\r
+\r
+ memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);\r
+ \r
+ ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;\r
+\r
+ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,\r
+ ConnectionStateTable[CSTableEntry].RemoteAddress,\r
+ (sizeof(TCP_Header_t) + PacketSize));\r
+\r
+ PacketSize += sizeof(TCP_Header_t);\r
+\r
+ /* Fill out the response IP header */\r
+ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + PacketSize);\r
+ IPHeaderOUT->TypeOfService = 0;\r
+ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+ IPHeaderOUT->Version = 4;\r
+ IPHeaderOUT->Flags = 0;\r
+ IPHeaderOUT->FragmentOffset = 0;\r
+ IPHeaderOUT->Identification = 0;\r
+ IPHeaderOUT->HeaderChecksum = 0;\r
+ IPHeaderOUT->Protocol = PROTOCOL_TCP;\r
+ IPHeaderOUT->TTL = DEFAULT_TTL;\r
+ IPHeaderOUT->SourceAddress = ServerIPAddress;\r
+ IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;\r
+ \r
+ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+ \r
+ PacketSize += sizeof(IP_Header_t);\r
+ \r
+ /* Fill out the response Ethernet frame header */\r
+ FrameOUTHeader->Source = ServerMACAddress;\r
+ FrameOUTHeader->Destination = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};\r
+ FrameOUTHeader->EtherType = SwapEndian_16(ETHERTYPE_IPV4);\r
+\r
+ PacketSize += sizeof(Ethernet_Frame_Header_t);\r
+\r
+ /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+ RNDISInterfaceInfo->FrameOUT.FrameLength = PacketSize;\r
+ RNDISInterfaceInfo->FrameOUT.FrameInBuffer = true;\r
+ \r
+ ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;\r
+ \r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are\r
+ * processed.\r
+ */\r
+void TCP_Init(void)\r
+{\r
+ /* Initialize the port state table with all CLOSED entries */\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)\r
+ PortStateTable[PTableEntry].State = TCP_Port_Closed;\r
+\r
+ /* Initialize the connection table with all CLOSED entries */\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed;\r
+}\r
+\r
+/** Sets the state and callback handler of the given port, specified in big endian to the given state.\r
+ *\r
+ * \param Port Port whose state and callback function to set, specified in big endian\r
+ * \param State New state of the port, a value from the TCP_PortStates_t enum\r
+ * \param Handler Application callback handler for the port\r
+ *\r
+ * \return Boolean true if the port state was set, false otherwise (no more space in the port state table)\r
+ */\r
+bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*))\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ /* Check to see if the port entry is already in the port state table */\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Find existing entry for the port in the table, update it if found */\r
+ if (PortStateTable[PTableEntry].Port == Port)\r
+ {\r
+ PortStateTable[PTableEntry].State = State;\r
+ PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+ return true;\r
+ }\r
+ }\r
+\r
+ /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */\r
+ if (State == TCP_Port_Open)\r
+ {\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Find a closed port entry in the table, change it to the given port and state */\r
+ if (PortStateTable[PTableEntry].State == TCP_Port_Closed)\r
+ {\r
+ PortStateTable[PTableEntry].Port = Port;\r
+ PortStateTable[PTableEntry].State = State;\r
+ PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ /* Port not in table and no room to add it, return failure */\r
+ return false;\r
+ }\r
+ else\r
+ {\r
+ /* Port not in table but trying to close it, so operation successful */\r
+ return true;\r
+ }\r
+}\r
+\r
+/** Retrieves the current state of a given TCP port, specified in big endian.\r
+ *\r
+ * \param Port TCP port whose state is to be retrieved, given in big-endian\r
+ *\r
+ * \return A value from the TCP_PortStates_t enum\r
+ */\r
+uint8_t TCP_GetPortState(uint16_t Port)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Find existing entry for the port in the table, return the port status if found */\r
+ if (PortStateTable[PTableEntry].Port == Port)\r
+ return PortStateTable[PTableEntry].State;\r
+ }\r
+ \r
+ /* Port not in table, assume closed */\r
+ return TCP_Port_Closed;\r
+}\r
+\r
+/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the\r
+ * connection exists in the connection state table it is updated, otherwise it is created if possible.\r
+ *\r
+ * \param Port TCP port of the connection on the device, specified in big endian\r
+ * \param RemoteAddress Remote protocol IP address of the connected device\r
+ * \param RemotePort TCP port of the remote device in the connection, specified in big endian\r
+ * \param State TCP connection state, a value from the TCP_ConnectionStates_t enum\r
+ *\r
+ * \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)\r
+ */\r
+bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find port entry in the table */\r
+ if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+ {\r
+ ConnectionStateTable[CSTableEntry].State = State;\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find empty entry in the table */\r
+ if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)\r
+ {\r
+ ConnectionStateTable[CSTableEntry].Port = Port;\r
+ ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress; \r
+ ConnectionStateTable[CSTableEntry].RemotePort = RemotePort;\r
+ ConnectionStateTable[CSTableEntry].State = State;\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ return false;\r
+}\r
+\r
+/** Retrieves the current state of a given TCP connection to a host.\r
+ *\r
+ * \param Port TCP port on the device in the connection, specified in big endian\r
+ * \param RemoteAddress Remote protocol IP address of the connected host\r
+ * \param RemotePort Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ * \return A value from the TCP_ConnectionStates_t enum\r
+ */\r
+uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find port entry in the table */\r
+ if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+ \r
+ {\r
+ return ConnectionStateTable[CSTableEntry].State;\r
+ }\r
+ }\r
+ \r
+ return TCP_Connection_Closed;\r
+}\r
+\r
+/** Retrieves the connection info structure of a given connection to a host.\r
+ *\r
+ * \param Port TCP port on the device in the connection, specified in big endian\r
+ * \param RemoteAddress Remote protocol IP address of the connected host\r
+ * \param RemotePort Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ * \return ConnectionInfo structure of the connection if found, NULL otherwise\r
+ */\r
+TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find port entry in the table */\r
+ if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+ {\r
+ return &ConnectionStateTable[CSTableEntry].Info;\r
+ }\r
+ }\r
+ \r
+ return NULL;\r
+}\r
+\r
+/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if one is created by a application handler.\r
+ *\r
+ * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
+ * \param TCPHeaderInStart Pointer to the start of the incoming packet's TCP header\r
+ * \param TCPHeaderOutStart Pointer to the start of the outgoing packet's TCP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ * response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ * next Ethernet packet handler iteration\r
+ */\r
+int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart)\r
+{\r
+ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart;\r
+ TCP_Header_t* TCPHeaderIN = (TCP_Header_t*)TCPHeaderInStart;\r
+ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;\r
+\r
+ TCP_ConnectionInfo_t* ConnectionInfo;\r
+ \r
+ DecodeTCPHeader(TCPHeaderInStart);\r
+\r
+ bool PacketResponse = false;\r
+ \r
+ /* Check if the destination port is open and allows incoming connections */\r
+ if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)\r
+ {\r
+ /* Detect SYN from host to start a connection */\r
+ if (TCPHeaderIN->Flags & TCP_FLAG_SYN)\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen);\r
+\r
+ /* Detect RST from host to abort existing connection */\r
+ if (TCPHeaderIN->Flags & TCP_FLAG_RST)\r
+ {\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed); \r
+ }\r
+ else\r
+ {\r
+ /* Process the incoming TCP packet based on the current connection state for the sender and port */\r
+ switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort))\r
+ {\r
+ case TCP_Connection_Listen:\r
+ if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
+ {\r
+ /* SYN connection when closed starts a connection with a peer */\r
+\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
+ TCP_Connection_SYNReceived);\r
+ \r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
+\r
+ ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
+ ConnectionInfo->SequenceNumberOut = 0;\r
+ ConnectionInfo->Buffer.InUse = false;\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_SYNReceived:\r
+ if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+ {\r
+ /* ACK during the connection process completes the connection to a peer */\r
+\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Established);\r
+\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+ \r
+ ConnectionInfo->SequenceNumberOut++;\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_Established:\r
+ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+ {\r
+ /* FIN ACK when connected to a peer starts the finalization process */\r
+ \r
+ TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);\r
+\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ ConnectionInfo->SequenceNumberIn++;\r
+ ConnectionInfo->SequenceNumberOut++;\r
+ }\r
+ else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH)))\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ /* Check if the buffer is currently in use either by a buffered data to send, or receive */ \r
+ if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))\r
+ { \r
+ ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;\r
+ ConnectionInfo->Buffer.InUse = true;\r
+ ConnectionInfo->Buffer.Length = 0;\r
+ }\r
+ \r
+ /* Check if the buffer has been claimed by us to read in data from the peer */\r
+ if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&\r
+ (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))\r
+ {\r
+ uint16_t IPOffset = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+ uint16_t TCPOffset = (TCPHeaderIN->DataOffset * sizeof(uint32_t));\r
+ uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset);\r
+\r
+ /* Copy the packet data into the buffer */\r
+ memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length],\r
+ &((uint8_t*)TCPHeaderInStart)[TCPOffset],\r
+ DataLength);\r
+\r
+ ConnectionInfo->SequenceNumberIn += DataLength;\r
+ ConnectionInfo->Buffer.Length += DataLength;\r
+ \r
+ /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */\r
+ if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))\r
+ {\r
+ ConnectionInfo->Buffer.InUse = false;\r
+ ConnectionInfo->Buffer.Ready = true;\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ PacketResponse = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* Buffer is currently in use by the application, defer processing of the incoming packet */\r
+ return NO_PROCESS;\r
+ }\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_Closing:\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);\r
+ PacketResponse = true;\r
+ \r
+ ConnectionInfo->Buffer.InUse = false;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);\r
+\r
+ break;\r
+ case TCP_Connection_FINWait1:\r
+ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ PacketResponse = true;\r
+\r
+ ConnectionInfo->SequenceNumberIn++;\r
+ ConnectionInfo->SequenceNumberOut++;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+ }\r
+ else if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+ {\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_FINWait2:\r
+ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ PacketResponse = true;\r
+\r
+ ConnectionInfo->SequenceNumberIn++;\r
+ ConnectionInfo->SequenceNumberOut++;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_CloseWait:\r
+ if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+ {\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+ }\r
+ \r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* Port is not open, indicate via a RST/ACK response to the sender */\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ }\r
+ \r
+ /* Check if we need to respond to the sent packet */\r
+ if (PacketResponse)\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->SourcePort = TCPHeaderIN->DestinationPort;\r
+ TCPHeaderOUT->DestinationPort = TCPHeaderIN->SourcePort;\r
+ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionInfo->SequenceNumberOut);\r
+ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);\r
+ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+ \r
+ if (!(ConnectionInfo->Buffer.InUse))\r
+ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE);\r
+ else\r
+ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length);\r
+\r
+ TCPHeaderOUT->UrgentPointer = 0;\r
+ TCPHeaderOUT->Checksum = 0;\r
+ TCPHeaderOUT->Reserved = 0;\r
+ \r
+ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,\r
+ IPHeaderIN->SourceAddress, sizeof(TCP_Header_t)); \r
+\r
+ return sizeof(TCP_Header_t); \r
+ }\r
+\r
+ return NO_RESPONSE;\r
+}\r
+\r
+/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,\r
+ * complimented.\r
+ *\r
+ * \param TCPHeaderOutStart Pointer to the start of the packet's outgoing TCP header\r
+ * \param SourceAddress Source protocol IP address of the outgoing IP header\r
+ * \param DestinationAddress DestinationAddress protocol IP address of the outgoing IP header\r
+ * \param TCPOutSize Size in bytes of the TCP data header and payload\r
+ *\r
+ * \return A 16-bit TCP checksum value\r
+ */\r
+static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+ IP_Address_t DestinationAddress, uint16_t TCPOutSize)\r
+{\r
+ uint32_t Checksum = 0;\r
+ \r
+ /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,\r
+ complimented */\r
+ \r
+ Checksum += ((uint16_t*)&SourceAddress)[0];\r
+ Checksum += ((uint16_t*)&SourceAddress)[1];\r
+ Checksum += ((uint16_t*)&DestinationAddress)[0];\r
+ Checksum += ((uint16_t*)&DestinationAddress)[1];\r
+ Checksum += SwapEndian_16(PROTOCOL_TCP);\r
+ Checksum += SwapEndian_16(TCPOutSize);\r
+\r
+ for (uint8_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)\r
+ Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];\r
+ \r
+ if (TCPOutSize & 0x01)\r
+ Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);\r
+ \r
+ while (Checksum & 0xFFFF0000)\r
+ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+ \r
+ return ~Checksum;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for TCP.c.\r
+ */\r
+\r
+#ifndef _TCP_H_\r
+#define _TCP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** Maximum number of TCP ports which can be open at the one time */\r
+ #define MAX_OPEN_TCP_PORTS 1\r
+\r
+ /** Maximum number of TCP connections which can be sustained at the one time */\r
+ #define MAX_TCP_CONNECTIONS 1\r
+\r
+ /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */\r
+ #define TCP_WINDOW_SIZE 1024\r
+ \r
+ /** Port number for HTTP transmissions */\r
+ #define TCP_PORT_HTTP SwapEndian_16(80)\r
+ \r
+ /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */\r
+ #define TCP_PACKETDIR_IN false\r
+\r
+ /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */\r
+ #define TCP_PACKETDIR_OUT true\r
+ \r
+ /** Congestion Window Reduced TCP flag mask */\r
+ #define TCP_FLAG_CWR (1 << 7)\r
+\r
+ /** Explicit Congestion Notification TCP flag mask */\r
+ #define TCP_FLAG_ECE (1 << 6)\r
+\r
+ /** Urgent TCP flag mask */\r
+ #define TCP_FLAG_URG (1 << 5)\r
+\r
+ /** Data Acknowledge TCP flag mask */\r
+ #define TCP_FLAG_ACK (1 << 4)\r
+\r
+ /** Data Push TCP flag mask */\r
+ #define TCP_FLAG_PSH (1 << 3)\r
+\r
+ /** Reset TCP flag mask */\r
+ #define TCP_FLAG_RST (1 << 2)\r
+\r
+ /** Synchronize TCP flag mask */\r
+ #define TCP_FLAG_SYN (1 << 1)\r
+\r
+ /** Connection Finalize TCP flag mask */\r
+ #define TCP_FLAG_FIN (1 << 0)\r
+ \r
+ /** Application macro: Determines if the given application buffer contains a packet received from the host\r
+ *\r
+ * \param Buffer Application buffer to check\r
+ *\r
+ * \return Boolean true if the buffer contains a packet from the host, false otherwise\r
+ */\r
+ #define TCP_APP_HAS_RECEIVED_PACKET(Buffer) (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN))\r
+\r
+ /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.\r
+ *\r
+ * \param Buffer Application buffer to check\r
+ *\r
+ * \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise\r
+ */\r
+ #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \\r
+ (Buffer->Direction == TCP_PACKETDIR_OUT))\r
+\r
+ /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.\r
+ *\r
+ * \param Buffer Application buffer to check\r
+ *\r
+ * \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise\r
+ */\r
+ #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer) Buffer->InUse\r
+\r
+ /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be\r
+ * performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.\r
+ *\r
+ * \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().\r
+ *\r
+ * \param Buffer Application buffer to lock\r
+ */\r
+ #define TCP_APP_CAPTURE_BUFFER(Buffer) MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE\r
+\r
+ /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.\r
+ *\r
+ * \param Buffer Application buffer to release\r
+ */\r
+ #define TCP_APP_RELEASE_BUFFER(Buffer) MACROS{ Buffer->InUse = false; }MACROE\r
+\r
+ /** Application macro: Sends the contents of the given application buffer to the host.\r
+ *\r
+ * \param Buffer Application buffer to send\r
+ * \param Len Length of data contained in the buffer\r
+ */\r
+ #define TCP_APP_SEND_BUFFER(Buffer, Len) MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE\r
+\r
+ /** Application macro: Clears the application buffer, ready for a packet to be written to it.\r
+ *\r
+ * \param Buffer Application buffer to clear\r
+ */\r
+ #define TCP_APP_CLEAR_BUFFER(Buffer) MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE\r
+ \r
+ /** Application macro: Closes an open connection to a host.\r
+ *\r
+ * \param Connection Open TCP connection to close\r
+ */\r
+ #define TCP_APP_CLOSECONNECTION(Connection) MACROS{ Connection->State = TCP_Connection_Closing; }MACROE\r
+\r
+ /* Enums: */\r
+ /** Enum for possible TCP port states */\r
+ enum TCP_PortStates_t\r
+ {\r
+ TCP_Port_Closed = 0, /**< TCP port closed, no connections to a host may be made on this port. */\r
+ TCP_Port_Open = 1, /**< TCP port open, connections to a host may be made on this port. */\r
+ };\r
+ \r
+ /** Enum for possible TCP connection states */\r
+ enum TCP_ConnectionStates_t\r
+ {\r
+ TCP_Connection_Listen = 0, /**< Listening for a connection from a host */\r
+ TCP_Connection_SYNSent = 1, /**< Unused */\r
+ TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */\r
+ TCP_Connection_Established = 3, /**< Connection established in both directions */\r
+ TCP_Connection_FINWait1 = 4, /**< Closing, waiting for ACK */\r
+ TCP_Connection_FINWait2 = 5, /**< Closing, waiting for FIN ACK */\r
+ TCP_Connection_CloseWait = 6, /**< Closing, waiting for ACK */\r
+ TCP_Connection_Closing = 7, /**< Unused */\r
+ TCP_Connection_LastACK = 8, /**< Unused */\r
+ TCP_Connection_TimeWait = 9, /**< Unused */\r
+ TCP_Connection_Closed = 10, /**< Connection closed in both directions */ \r
+ };\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for a TCP connection buffer structure, including size, data and direction */\r
+ typedef struct\r
+ {\r
+ uint16_t Length; /**< Length of data in the TCP application buffer */\r
+ uint8_t Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */\r
+ bool Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN or TCP_PACKETDIR_OUT */\r
+ bool Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates\r
+ * buffer ready to be sent to the host\r
+ */\r
+ bool InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */\r
+ } TCP_ConnectionBuffer_t;\r
+\r
+ /** Type define for a TCP connection information structure */\r
+ typedef struct\r
+ {\r
+ uint32_t SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ \r
+ uint32_t SequenceNumberOut; /**< Current TCP sequence number for device-to-host */\r
+ TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */\r
+ } TCP_ConnectionInfo_t;\r
+\r
+ /** Type define for a complete TCP connection state */\r
+ typedef struct\r
+ {\r
+ uint16_t Port; /**< Connection port number on the device */\r
+ uint16_t RemotePort; /**< Connection port number on the host */\r
+ IP_Address_t RemoteAddress; /**< Connection protocol IP address of the host */\r
+ TCP_ConnectionInfo_t Info; /**< Connection information, including application buffer */\r
+ uint8_t State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */\r
+ } TCP_ConnectionState_t;\r
+\r
+ /** Type define for a TCP port state */\r
+ typedef struct\r
+ {\r
+ uint16_t Port; /**< TCP port number on the device */\r
+ uint8_t State; /**< Current port state, a value from the TCP_PortStates_t enum */\r
+ void (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState,\r
+ TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */\r
+ } TCP_PortState_t;\r
+\r
+ /** Type define for a TCP packet header */\r
+ typedef struct\r
+ {\r
+ uint16_t SourcePort; /**< Source port of the TCP packet */\r
+ uint16_t DestinationPort; /**< Destination port of the TCP packet */\r
+ \r
+ uint32_t SequenceNumber; /**< Data sequence number of the packet */\r
+ uint32_t AcknowledgmentNumber; /**< Data acknowledgment number of the packet */\r
+ \r
+ unsigned char Reserved : 4; /**< Reserved, must be all 0 */\r
+ unsigned char DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */\r
+ uint8_t Flags; /**< TCP packet flags */\r
+ uint16_t WindowSize; /**< Current data window size (bytes remaining in reception buffer) */\r
+ \r
+ uint16_t Checksum; /**< TCP checksum */\r
+ uint16_t UrgentPointer; /**< Urgent data pointer */\r
+ } TCP_Header_t;\r
+ \r
+ /* External Variables: */\r
+ TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+ /* Function Prototypes: */\r
+ void TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
+ void TCP_Init(void);\r
+ bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
+ uint8_t TCP_GetPortState(uint16_t Port);\r
+ bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
+ uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);\r
+\r
+ #if defined(INCLUDE_FROM_TCP_C)\r
+ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+ IP_Address_t DestinationAddress, uint16_t TCPOutSize);\r
+ #endif\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low\r
+ * reliability packets which are typically used to encapsulate streaming data.\r
+ */\r
+ \r
+#define INCLUDE_FROM_UDP_C\r
+#include "UDP.h"\r
+\r
+/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if a subprotocol handler has created a response packet.\r
+ *\r
+ * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
+ * \param UDPHeaderInStart Pointer to the start of the incoming packet's UDP header\r
+ * \param UDPHeaderOutStart Pointer to the start of the outgoing packet's UDP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart)\r
+{\r
+ UDP_Header_t* UDPHeaderIN = (UDP_Header_t*)UDPHeaderInStart;\r
+ UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;\r
+ \r
+ int16_t RetSize = NO_RESPONSE;\r
+ \r
+ DecodeUDPHeader(UDPHeaderInStart);\r
+ \r
+ /* Check to see if the UDP packet is a DHCP packet */\r
+ if (SwapEndian_16(UDPHeaderIN->DestinationPort) == UDP_PORT_DHCP_REQUEST)\r
+ {\r
+ RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart,\r
+ &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)],\r
+ &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);\r
+ }\r
+ \r
+ /* Check to see if the protocol processing routine has filled out a response */\r
+ if (RetSize > 0)\r
+ {\r
+ /* Fill out the response UDP packet header */\r
+ UDPHeaderOUT->SourcePort = UDPHeaderIN->DestinationPort;\r
+ UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort;\r
+ UDPHeaderOUT->Checksum = 0;\r
+ UDPHeaderOUT->Length = SwapEndian_16(sizeof(UDP_Header_t) + RetSize);\r
+\r
+ /* Return the size of the response so far */\r
+ return (sizeof(UDP_Header_t) + RetSize);\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for IP.c.\r
+ */\r
+\r
+#ifndef _UDP_H_\r
+#define _UDP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** Source UDP port for a DHCP request */\r
+ #define UDP_PORT_DHCP_REQUEST 67\r
+\r
+ /** Destination UDP port for a DHCP reply */\r
+ #define UDP_PORT_DHCP_REPLY 68\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for a UDP packet header */\r
+ typedef struct\r
+ {\r
+ uint16_t SourcePort; /**< Packet source port */\r
+ uint16_t DestinationPort; /**< Packet destination port */\r
+ uint16_t Length; /**< Total packet length, in bytes */\r
+ uint16_t Checksum; /**< Optional UDP packet checksum */\r
+ } UDP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This\r
+ * application will serve up a static HTTP webpage when requested by the host.\r
+ */\r
+\r
+#include "Webserver.h"\r
+\r
+/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the\r
+ * given location, and gives extra connection information.\r
+ */\r
+char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n"\r
+ "Server: LUFA RNDIS\r\n"\r
+ "Content-type: text/html\r\n"\r
+ "Connection: close\r\n\r\n";\r
+\r
+/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically\r
+ * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.\r
+ */\r
+char PROGMEM HTTPPage[] = \r
+ "<html>"\r
+ " <head>"\r
+ " <title>"\r
+ " LUFA Webserver Demo"\r
+ " </title>"\r
+ " </head>"\r
+ " <body>"\r
+ " <h1>Hello from your USB AVR!</h1>"\r
+ " <p>"\r
+ " Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."\r
+ " <br /><br />"\r
+ " <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"\r
+ " <hr />"\r
+ " <i>LUFA Version: </i>" LUFA_VERSION_STRING\r
+ " </p>"\r
+ " </body>"\r
+ "</html>";\r
+\r
+\r
+/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application\r
+ * callback routine for packets sent to the HTTP protocol port.\r
+ */\r
+void Webserver_Init(void)\r
+{\r
+ /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */\r
+ TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback);\r
+}\r
+\r
+/** Indicates if a given request equals the given HTTP command.\r
+ *\r
+ * \param RequestHeader HTTP request made by the host\r
+ * \param Command HTTP command to compare the request to\r
+ *\r
+ * \return Boolean true if the command matches the request, false otherwise\r
+ */\r
+static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)\r
+{\r
+ /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */\r
+ return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0);\r
+}\r
+\r
+/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request\r
+ * has been made (if any), and serves up appropriate responses.\r
+ *\r
+ * \param ConnectionState Pointer to a TCP Connection State structure giving connection information\r
+ * \param Buffer Pointer to the application's send/receive packet buffer\r
+ */\r
+void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)\r
+{\r
+ char* BufferDataStr = (char*)Buffer->Data;\r
+ static uint8_t PageBlock = 0;\r
+ \r
+ /* Check to see if a packet has been received on the HTTP port from a remote host */\r
+ if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))\r
+ {\r
+ if (IsHTTPCommand(Buffer->Data, "GET"))\r
+ {\r
+ PageBlock = 0;\r
+\r
+ /* Copy the HTTP response header into the packet buffer */\r
+ strcpy_P(BufferDataStr, HTTPHeader);\r
+ \r
+ /* Send the buffer contents to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+\r
+ /* Lock the buffer to Device->Host transmissions only while we send the page contents */\r
+ TCP_APP_CAPTURE_BUFFER(Buffer);\r
+ }\r
+ else if (IsHTTPCommand(Buffer->Data, "HEAD"))\r
+ {\r
+ /* Copy the HTTP response header into the packet buffer */\r
+ strcpy_P(BufferDataStr, HTTPHeader);\r
+\r
+ /* Send the buffer contents to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+ }\r
+ else if (IsHTTPCommand(Buffer->Data, "TRACE"))\r
+ {\r
+ /* Echo the host's query back to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);\r
+ }\r
+ else\r
+ {\r
+ /* Unknown request, just clear the buffer (drop the packet) */\r
+ TCP_APP_CLEAR_BUFFER(Buffer);\r
+ }\r
+ }\r
+ else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer))\r
+ {\r
+ uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);\r
+ uint16_t Length;\r
+ \r
+ /* Determine the length of the loaded block */\r
+ Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);\r
+\r
+ /* Copy the next buffer sized block of the page to the packet buffer */\r
+ strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);\r
+ \r
+ /* Send the buffer contents to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, Length);\r
+\r
+ /* Check to see if the entire page has been sent */\r
+ if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE))\r
+ {\r
+ /* Unlock the buffer so that the host can fill it with future packets */\r
+ TCP_APP_RELEASE_BUFFER(Buffer);\r
+ \r
+ /* Close the connection to the host */\r
+ TCP_APP_CLOSECONNECTION(ConnectionState);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Webserver.c.\r
+ */\r
+ \r
+#ifndef _WEBSERVER_H_\r
+#define _WEBSERVER_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+ \r
+ #include <LUFA/Version.h>\r
+ \r
+ #include "TCP.h"\r
+ \r
+ /* Macros: */\r
+ /** Maximum size of a HTTP response per transmission */\r
+ #define HTTP_REPLY_BLOCK_SIZE 128\r
+ \r
+ /* Function Prototypes: */\r
+ void Webserver_Init(void);\r
+ void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer);\r
+\r
+#endif\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>RNDISEthernet</ProjectName><Created>30-Sep-2008 14:17:05</Created><LastEdit>22-Jan-2009 17:52:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:17:05</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\LUFAWORK\Demos\RNDISEthernet\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>ARP.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Ethernet.c</SOURCEFILE><SOURCEFILE>ICMP.c</SOURCEFILE><SOURCEFILE>IP.c</SOURCEFILE><SOURCEFILE>ProtocolDecoders.c</SOURCEFILE><SOURCEFILE>RNDIS.c</SOURCEFILE><SOURCEFILE>RNDISEthernet.c</SOURCEFILE><SOURCEFILE>TCP.c</SOURCEFILE><SOURCEFILE>Webserver.c</SOURCEFILE><HEADERFILE>ARP.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Ethernet.h</HEADERFILE><HEADERFILE>EthernetProtocols.h</HEADERFILE><HEADERFILE>ICMP.h</HEADERFILE><HEADERFILE>IP.h</HEADERFILE><HEADERFILE>ProtocolDecoders.h</HEADERFILE><HEADERFILE>RNDIS.h</HEADERFILE><HEADERFILE>RNDISEthernet.h</HEADERFILE><HEADERFILE>TCP.h</HEADERFILE><HEADERFILE>Webserver.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>RNDISEthernet.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-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\EthernetProtocols.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the RNDISEthernet demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "RNDISEthernet.h"\r
+\r
+/** LUFA RNDIS Class driver interface configuration and state information. This structure is\r
+ * passed to all RNDIS Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_RNDIS_t Ethernet_RNDIS_Interface =\r
+ {\r
+ .ControlInterfaceNumber = 0,\r
+\r
+ .DataINEndpointNumber = CDC_TX_EPNUM,\r
+ .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = CDC_RX_EPNUM,\r
+ .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
+ .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ \r
+ .AdapterVendorDescription = "LUFA RNDIS Demo Adapter",\r
+ .AdapterMACAddress = {ADAPTER_MAC_ADDRESS},\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ TCP_Init();\r
+ Webserver_Init();\r
+\r
+ printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
+\r
+ for (;;)\r
+ {\r
+ if (Ethernet_RNDIS_Interface.FrameIN.FrameInBuffer)\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
+ Ethernet_ProcessPacket(&Ethernet_RNDIS_Interface.FrameIN, &Ethernet_RNDIS_Interface.FrameOUT);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ }\r
+\r
+ TCP_TCPTask(&Ethernet_RNDIS_Interface);\r
+\r
+ USB_RNDIS_USBTask(&Ethernet_RNDIS_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ SerialStream_Init(9600, false);\r
+ USB_Init();\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_RNDIS_ConfigureEndpoints(&Ethernet_RNDIS_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_RNDIS_ProcessControlPacket(&Ethernet_RNDIS_Interface);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for RNDISEthernet.c.\r
+ */\r
+ \r
+#ifndef _RNDISETHERNET_H_\r
+#define _RNDISETHERNET_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/pgmspace.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+ #include <stdio.h>\r
+\r
+ #include "Descriptors.h"\r
+
+ #include "Lib/Ethernet.h"\r
+ #include "Lib/TCP.h"\r
+ #include "Lib/ARP.h"\r
+ #include "Lib/Webserver.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
+ #define LEDMASK_USB_BUSY (LEDS_LED2)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+ \r
+ void CALLBACK_USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * Remote Network Driver Interface demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a CDC RNDIS device acting as a simple network interface for\r
+ * ethernet packet exchange. RNDIS is a proprietary Microsoft\r
+ * standard; this demo will only work on Windows 2000 (manually\r
+ * patched with the Microsoft RNDIS hotfix) and above (with no\r
+ * manual patches), or on the latest Linux kernels.\r
+ * \r
+ * Before running, you will need to install the INF file that\r
+ * is located in the RNDISEthernet project directory. This will\r
+ * enable Windows to use its inbuilt RNDIS drivers, negating the\r
+ * need for special Windows drivers for the device. To install,\r
+ * right-click the .INF file and choose the Install option. If\r
+ * Windows 2000 is used, the Microsoft INF file in the hotfix\r
+ * will need to be altered to use the VID/PID of the demo and\r
+ * then chosen instead of the LUFA RNDIS INF file when prompted.\r
+ * \r
+ * When enumerated, this demo will install as a new network\r
+ * adapter which ethernet packets can be sent to and received\r
+ * from. Running on top of the adapter is a very simple TCP/IP\r
+ * stack with a HTTP webserver and TELNET host which can be\r
+ * accessed through a web browser at IP address 10.0.0.2:80 or\r
+ * through a TELNET client at 10.0.0.2:25. This device also supports\r
+ * ping echos via the ICMP protocol.\r
+ * \r
+ * \note The TCP/IP stack in this demo has a number of limitations\r
+ * and should serve as an example only - it is not fully featured nor\r
+ * compliant to the TCP/IP specification. For complete projects, it is \r
+ * recommended that it be replaced with an external open source TCP/IP\r
+ * stack that is feature complete, such as the uIP stack.\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Communications Device Class (CDC)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>Microsoft RNDIS Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_ETHERNET</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_ARP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_IP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_ICMP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_TCP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_UDP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_DHCP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = RNDISEthernet\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ Lib/Ethernet.c \\r
+ Lib/ProtocolDecoders.c \\r
+ Lib/ICMP.c \\r
+ Lib/TCP.c \\r
+ Lib/UDP.c \\r
+ Lib/DHCP.c \\r
+ Lib/ARP.c \\r
+ Lib/IP.c \\r
+ Lib/Webserver.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/RNDIS.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DNO_DECODE_ETHERNET -DNO_DECODE_ARP -DNO_DECODE_ICMP -DNO_DECODE_IP -DNO_DECODE_TCP -DNO_DECODE_UDP -DNO_DECODE_DHCP\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x02,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204B,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x01}\r
+ },\r
+\r
+ .CDC_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC_Functional_Union= \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS= 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA USB-RS232 Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+ /* Macros: */\r
+ /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPNUM 2\r
+\r
+ /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+ #define CDC_TX_EPNUM 3 \r
+\r
+ /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+ #define CDC_RX_EPNUM 4 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 16 \r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
+ USB_Descriptor_Endpoint_t ManagementEndpoint;\r
+ USB_Descriptor_Interface_t DCI_Interface;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - USB to Serial Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+; Windows LUFA USB to Serial Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204B\r
+\r
+;------------------------------------------------------------------------------\r
+; Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+; String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+#include "RingBuff.h"\r
+\r
+void Buffer_Initialize(RingBuff_t* Buffer)\r
+{\r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+ Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ Buffer->Elements = 0;\r
+ }\r
+}\r
+\r
+void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data)\r
+{\r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+ #if defined(BUFF_DROPOLD)\r
+ if (Buffer->Elements == BUFF_LENGTH)\r
+ {\r
+ Buffer->OutPtr++;\r
+ \r
+ if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+ Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ }\r
+ else\r
+ {\r
+ Buffer->Elements++;\r
+ }\r
+ #elif defined(BUFF_DROPNEW)\r
+ if (Buffer->Elements == BUFF_LENGTH)\r
+ return;\r
+ \r
+ Buffer->Elements++;\r
+ #elif defined(BUFF_NODROPCHECK)\r
+ Buffer->Elements++;\r
+ #endif\r
+ \r
+ *(Buffer->InPtr) = Data;\r
+ Buffer->InPtr++;\r
+ \r
+ if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+ Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ }\r
+}\r
+\r
+RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer)\r
+{\r
+ RingBuff_Data_t BuffData;\r
+ \r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+ if (!(Buffer->Elements))\r
+ return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+ #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+ BuffData = *(Buffer->OutPtr);\r
+ \r
+ Buffer->OutPtr++;\r
+ Buffer->Elements--;\r
+ \r
+ if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+ Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ }\r
+ \r
+ return BuffData;\r
+}\r
+\r
+#if defined(BUFF_USEPEEK)\r
+RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer)\r
+{\r
+ RingBuff_Data_t BuffData;\r
+\r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+ if (!(Buffer->Elements))\r
+ return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+ #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+ BuffData = *(Buffer->OutPtr);\r
+ }\r
+\r
+ return BuffData;\r
+}\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/* Buffer Configuration: */\r
+ /* Buffer length - select static size of created ring buffers: */\r
+ #define BUFF_STATICSIZE 128 // Set to the static ring buffer size for all ring buffers (place size after define)\r
+\r
+ /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */\r
+ #define BUFF_VOLATILE // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access\r
+\r
+ /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */\r
+ #define BUFF_DROPOLD // Uncomment to cause full ring buffers to drop the oldest character to make space when full\r
+ // #define BUFF_DROPNEW // Uncomment to cause full ring buffers to drop the new character when full\r
+ // #define BUFF_NODROPCHECK // Uncomment to ignore full ring buffer checks - checking left to user!\r
+\r
+ /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ring buffer: */\r
+ //#define BUFF_EMPTYRETURNSZERO // Uncomment to return 0 when an empty ring buffer is read\r
+ #define BUFF_NOEMPTYCHECK // Uncomment to disable checking of empty ring buffers - checking left to user!\r
+ \r
+ /* Buffer storage type - set the datatype for the stored data */\r
+ #define BUFF_DATATYPE uint8_t // Change to the data type that is going to be stored into the buffer\r
+ \r
+ /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */\r
+ //#define BUFF_USEPEEK\r
+ \r
+#ifndef _RINGBUFF_H_\r
+#define _RINGBUFF_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/interrupt.h>\r
+ #include <util/atomic.h>\r
+ #include <limits.h>\r
+\r
+ #include <LUFA/Common/Common.h>\r
+\r
+ /* Defines and checks: */\r
+ #if defined(BUFF_STATICSIZE)\r
+ #define BUFF_LENGTH BUFF_STATICSIZE\r
+ #else\r
+ #error No buffer length specified!\r
+ #endif\r
+\r
+ #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK))\r
+ #error No buffer drop mode specified.\r
+ #endif\r
+\r
+ #if !defined(BUFF_DATATYPE)\r
+ #error Ringbuffer storage data type not specified.\r
+ #endif\r
+\r
+ #if defined(BUFF_VOLATILE)\r
+ #define BUFF_MODE volatile\r
+ #define BUFF_ATOMIC_BLOCK ATOMIC_BLOCK(ATOMIC_RESTORESTATE)\r
+ #else\r
+ #define BUFF_MODE\r
+ #define BUFF_ATOMIC_BLOCK\r
+ #endif\r
+\r
+ #if (BUFF_STATICSIZE > LONG_MAX)\r
+ #define RingBuff_Elements_t uint64_t\r
+ #elif (BUFF_STATICSIZE > INT_MAX)\r
+ #define RingBuff_Elements_t uint32_t\r
+ #elif (BUFF_STATICSIZE > CHAR_MAX)\r
+ #define RingBuff_Elements_t uint16_t\r
+ #else\r
+ #define RingBuff_Elements_t uint8_t\r
+ #endif\r
+ \r
+ /* Type Defines: */\r
+ typedef BUFF_DATATYPE RingBuff_Data_t;\r
+\r
+ typedef BUFF_MODE struct\r
+ {\r
+ RingBuff_Data_t Buffer[BUFF_LENGTH];\r
+ RingBuff_Data_t* InPtr;\r
+ RingBuff_Data_t* OutPtr;\r
+ RingBuff_Elements_t Elements;\r
+ } RingBuff_t;\r
+ \r
+ /* Function Prototypes: */\r
+ void Buffer_Initialize(RingBuff_t* Buff);\r
+ void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data);\r
+ RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer);\r
+ #if defined(BUFF_USEPEEK)\r
+ RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer);\r
+ #endif\r
+ \r
+#endif\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>USBtoSerial</ProjectName><Created>30-Sep-2008 14:18:39</Created><LastEdit>30-Sep-2008 14:18:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:18:39</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\Demos\USBtoSerial\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>RingBuff.c</SOURCEFILE><SOURCEFILE>USBtoSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>RingBuff.h</HEADERFILE><HEADERFILE>USBtoSerial.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>USBtoSerial.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the USBtoSerial demo. This file contains the main tasks of\r
+ * the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "USBtoSerial.h"\r
+\r
+/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */\r
+RingBuff_t Rx_Buffer;\r
+\r
+/** Circular buffer to hold data from the serial port before it is sent to the host. */\r
+RingBuff_t Tx_Buffer;\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ * passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ * within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
+ {\r
+ .ControlInterfaceNumber = 0,\r
+\r
+ .DataINEndpointNumber = CDC_TX_EPNUM,\r
+ .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .DataOUTEndpointNumber = CDC_RX_EPNUM,\r
+ .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
+\r
+ .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
+ .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+ SetupHardware();\r
+ \r
+ Buffer_Initialize(&Rx_Buffer);\r
+ Buffer_Initialize(&Tx_Buffer);\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ for (uint8_t DataBytesRem = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--)\r
+ {\r
+ if (!(BUFF_STATICSIZE - Rx_Buffer.Elements))\r
+ break;\r
+ \r
+ Buffer_StoreElement(&Rx_Buffer, USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface));\r
+ }\r
+ \r
+ if (Tx_Buffer.Elements)\r
+ USB_CDC_SendByte(&VirtualSerial_CDC_Interface, Buffer_GetElement(&Rx_Buffer));\r
+ \r
+ if (Rx_Buffer.Elements)\r
+ Serial_TxByte(Buffer_GetElement(&Rx_Buffer));\r
+ \r
+ USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ USB_Init();\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
+}\r
+\r
+/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer\r
+ * for later transmission to the host.\r
+ */\r
+ISR(USART1_RX_vect, ISR_BLOCK)\r
+{\r
+ if (USB_IsConnected)\r
+ Buffer_StoreElement(&Tx_Buffer, UDR1);\r
+}\r
+\r
+/** Event handler for the CDC Class driver Line Encoding Changed event.\r
+ *\r
+ * \param CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced\r
+ */\r
+void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)\r
+{\r
+ uint8_t ConfigMask = 0;\r
+\r
+ if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Odd)\r
+ ConfigMask = ((1 << UPM11) | (1 << UPM10));\r
+ else if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Even)\r
+ ConfigMask = (1 << UPM11);\r
+\r
+ if (CDCInterfaceInfo->LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits)\r
+ ConfigMask |= (1 << USBS1);\r
+\r
+ if (CDCInterfaceInfo->LineEncoding.DataBits == 6)\r
+ ConfigMask |= (1 << UCSZ10);\r
+ else if (CDCInterfaceInfo->LineEncoding.DataBits == 7)\r
+ ConfigMask |= (1 << UCSZ11);\r
+ else if (CDCInterfaceInfo->LineEncoding.DataBits == 8)\r
+ ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10));\r
+ \r
+ UCSR1A = (1 << U2X1); \r
+ UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));\r
+ UCSR1C = ConfigMask; \r
+ UBRR1 = SERIAL_2X_UBBRVAL((uint16_t)CDCInterfaceInfo->LineEncoding.BaudRateBPS);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for USBtoSerial.c.\r
+ */\r
+\r
+#ifndef _USB_SERIAL_H_\r
+#define _USB_SERIAL_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/interrupt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include "Lib/RingBuff.h"\r
+\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Peripheral/Serial.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+ /* Macros: */\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
+ /* Function Prototypes: */\r
+ void SetupHardware(void);\r
+\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+ \r
+ void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage USB to Serial Converter Demo (via CDC-ACM class)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Communications Device Class (CDC)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Abstract Control Model (ACM)</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF CDC Class Standard</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Communications Device Class demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a USB to Serial converter using the CDC class. Sent and\r
+ * received data on the serial port is communicated to the USB\r
+ * host.\r
+ * \r
+ * After running this demo for the first time on a new computer,\r
+ * you will need to supply the .INF file located in this demo\r
+ * project's directory as the device's driver when running under\r
+ * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ * negating the need for custom drivers for the device. Other\r
+ * Operating Systems should automatically use their own inbuilt\r
+ * CDC-ACM drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>BUFF_STATICSIZE</td>\r
+ * <td>RingBuff.h</td>\r
+ * <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = USBtoSerial\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ Lib/RingBuff.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2009.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA Device Demos. Call with "make all" to
+# rebuild all Device demos.
+
+# Projects 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 AudioInput clean
+ make -C AudioInput all
+
+ make -C AudioOutput clean
+ make -C AudioOutput all
+
+ make -C CDC clean
+ make -C CDC all
+
+ make -C DualCDC clean
+ make -C DualCDC all
+
+ make -C GenericHID clean
+ make -C GenericHID all
+
+ make -C Joystick clean
+ make -C Joystick all
+
+ make -C Keyboard clean
+ make -C Keyboard all
+
+ make -C KeyboardMouse clean
+ make -C KeyboardMouse all
+
+ make -C MassStorage clean
+ make -C MassStorage all
+
+ make -C MIDI clean
+ make -C MIDI all
+
+ make -C Mouse clean
+ make -C Mouse all
+
+ make -C RNDISEthernet clean
+ make -C RNDISEthernet all
+
+ make -C USBtoSerial clean
+ make -C USBtoSerial all
+
+%:
+ make -C AudioInput $@
+ make -C AudioOutput $@
+ make -C CDC $@
+ make -C DualCDC $@
+ make -C GenericHID $@
+ make -C Joystick $@
+ make -C Keyboard $@
+ make -C KeyboardMouse $@
+ make -C MassStorage $@
+ make -C MIDI $@
+ make -C Mouse $@
+ make -C RNDISEthernet $@
+ make -C USBtoSerial $@
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0xEF,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x204E,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 4,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .IAD1 = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
-\r
- .FirstInterfaceIndex = 0,\r
- .TotalInterfaces = 2,\r
-\r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
-\r
- .IADStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC1_CCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC1_Functional_IntHeader = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x00,\r
- \r
- .Data = {0x01, 0x10}\r
- },\r
-\r
- .CDC1_Functional_CallManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x01,\r
- \r
- .Data = {0x03, 0x01}\r
- },\r
-\r
- .CDC1_Functional_AbstractControlManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
- .SubType = 0x02,\r
- \r
- .Data = {0x06}\r
- },\r
- \r
- .CDC1_Functional_Union = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x06,\r
- \r
- .Data = {0x00, 0x01}\r
- },\r
-\r
- .CDC1_ManagementEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- .PollingIntervalMS = 0xFF\r
- },\r
-\r
- .CDC1_DCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x0A,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC1_DataOutEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
- \r
- .CDC1_DataInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
-\r
- .IAD2 = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
-\r
- .FirstInterfaceIndex = 2,\r
- .TotalInterfaces = 2,\r
-\r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
-\r
- .IADStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC2_CCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 2,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC2_Functional_IntHeader = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x00,\r
- \r
- .Data = {0x01, 0x10}\r
- },\r
-\r
- .CDC2_Functional_CallManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x01,\r
- \r
- .Data = {0x03, 0x03}\r
- },\r
-\r
- .CDC2_Functional_AbstractControlManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
- .SubType = 0x02,\r
- \r
- .Data = {0x06}\r
- },\r
- \r
- .CDC2_Functional_Union = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x06,\r
- \r
- .Data = {0x02, 0x03}\r
- },\r
-\r
- .CDC2_ManagementEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- .PollingIntervalMS = 0xFF\r
- },\r
-\r
- .CDC2_DCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 3,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x0A,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC2_DataOutEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
- \r
- .CDC2_DataInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Dual CDC Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address; \r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
- /* Macros: */\r
- /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
- #define CDC1_NOTIFICATION_EPNUM 3\r
-\r
- /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
- #define CDC1_TX_EPNUM 1 \r
-\r
- /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
- #define CDC1_RX_EPNUM 2 \r
-\r
- /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
- #define CDC2_NOTIFICATION_EPNUM 4\r
-\r
- /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
- #define CDC2_TX_EPNUM 5 \r
-\r
- /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
- #define CDC2_RX_EPNUM 6 \r
-\r
- /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
- #define CDC_NOTIFICATION_EPSIZE 8\r
-\r
- /** Size in bytes of the CDC data IN and OUT endpoints. */\r
- #define CDC_TXRX_EPSIZE 16 \r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_Association_t IAD1;\r
- USB_Descriptor_Interface_t CDC1_CCI_Interface;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_IntHeader;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_CallManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(1) CDC1_Functional_AbstractControlManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_Union;\r
- USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint;\r
- USB_Descriptor_Interface_t CDC1_DCI_Interface;\r
- USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint;\r
- USB_Descriptor_Endpoint_t CDC1_DataInEndpoint;\r
- USB_Descriptor_Interface_Association_t IAD2;\r
- USB_Descriptor_Interface_t CDC2_CCI_Interface;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_IntHeader;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_CallManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(1) CDC2_Functional_AbstractControlManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_Union;\r
- USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint;\r
- USB_Descriptor_Interface_t CDC2_DCI_Interface;\r
- USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint;\r
- USB_Descriptor_Endpoint_t CDC2_DataInEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Dual CDC Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>DualCDC</ProjectName><Created>30-Sep-2008 14:06:03</Created><LastEdit>30-Sep-2008 14:06:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:03</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\Demos\DualCDC\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>DualCDC.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualCDC.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>DualCDC.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the DualCDC demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "DualCDC.h"\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- * passed to all CDC Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another. This is for the first CDC interface,\r
- * which sends strings to the host for each joystick movement.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial1_CDC_Interface =\r
- {\r
- .ControlInterfaceNumber = 0,\r
-\r
- .DataINEndpointNumber = CDC1_TX_EPNUM,\r
- .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = CDC1_RX_EPNUM,\r
- .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .NotificationEndpointNumber = CDC1_NOTIFICATION_EPNUM,\r
- .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- };\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- * passed to all CDC Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another. This is for the second CDC interface,\r
- * which echos back all received data from the host.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial2_CDC_Interface =\r
- {\r
- .ControlInterfaceNumber = 2,\r
-\r
- .DataINEndpointNumber = CDC2_TX_EPNUM,\r
- .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = CDC2_RX_EPNUM,\r
- .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .NotificationEndpointNumber = CDC2_NOTIFICATION_EPNUM,\r
- .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
- \r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- for (;;)\r
- {\r
- CheckJoystickMovement();\r
-\r
- /* Discard all received data on the first CDC interface */\r
- uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial1_CDC_Interface);\r
- while (BytesToDiscard--)\r
- USB_CDC_ReceiveByte(&VirtualSerial1_CDC_Interface);\r
-\r
- /* Echo all received data on the second CDC interface */\r
- uint16_t BytesToEcho = USB_CDC_BytesReceived(&VirtualSerial2_CDC_Interface);\r
- while (BytesToEcho--)\r
- USB_CDC_SendByte(&VirtualSerial2_CDC_Interface, USB_CDC_ReceiveByte(&VirtualSerial2_CDC_Interface));\r
- \r
- USB_CDC_USBTask(&VirtualSerial1_CDC_Interface);\r
- USB_CDC_USBTask(&VirtualSerial2_CDC_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- USB_Init();\r
-}\r
-\r
-/** Checks for changes in the position of the board joystick, sending strings to the host upon each change\r
- * through the first of the CDC interfaces.\r
- */\r
-void CheckJoystickMovement(void)\r
-{\r
- uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
- char* ReportString = NULL;\r
- static bool ActionSent = false;\r
-\r
- char* JoystickStrings[] =\r
- {\r
- "Joystick Up\r\n",\r
- "Joystick Down\r\n",\r
- "Joystick Left\r\n",\r
- "Joystick Right\r\n",\r
- "Joystick Pressed\r\n",\r
- };\r
-\r
- if (JoyStatus_LCL & JOY_UP)\r
- ReportString = JoystickStrings[0];\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- ReportString = JoystickStrings[1];\r
- else if (JoyStatus_LCL & JOY_LEFT)\r
- ReportString = JoystickStrings[2];\r
- else if (JoyStatus_LCL & JOY_RIGHT)\r
- ReportString = JoystickStrings[3];\r
- else if (JoyStatus_LCL & JOY_PRESS)\r
- ReportString = JoystickStrings[4];\r
- else\r
- ActionSent = false;\r
- \r
- if ((ReportString != NULL) && (ActionSent == false))\r
- {\r
- ActionSent = true;\r
- \r
- USB_CDC_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString)); \r
- }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial1_CDC_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-\r
- if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial2_CDC_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_CDC_ProcessControlPacket(&VirtualSerial1_CDC_Interface);\r
- USB_CDC_ProcessControlPacket(&VirtualSerial2_CDC_Interface);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for DualCDC.c.\r
- */\r
-\r
-#ifndef _DUAL_CDC_H_\r
-#define _DUAL_CDC_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
- #include <string.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
- void CheckJoystickMovement(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port)\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Miscellaneous Device Class</td>\r
- * <td>( Sub-Interface: Communications Device Class (CDC) )</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Common Class</td> \r
- * <td>( Sub-Interface: Abstract Control Model (ACM) )</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF Interface Association Descriptor ECN</td>\r
- * <td>USBIF CDC Class Standard</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Dual Communications Device Class demonstration application.\r
- * This gives a simple reference application for implementing\r
- * a compound device with dual CDC functions acting as a pair\r
- * of virtual serial ports. This demo uses Interface Association\r
- * Descriptors to link together the pair of related CDC\r
- * descriptors for each virtual serial port, which may not be\r
- * supported in all OSes - Windows Vista is supported, as is\r
- * XP (although the latter may need a hotfix to function).\r
- * \r
- * Joystick actions are transmitted to the host as strings\r
- * through the first serial port. The device does not respond to\r
- * serial data sent from the host in the first serial port.\r
- * \r
- * The second serial port echoes back data sent from the host.\r
- * \r
- * After running this demo for the first time on a new computer,\r
- * you will need to supply the .INF file located in this demo\r
- * project's directory as the device's driver when running under\r
- * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
- * negating the need for custom drivers for the device. Other\r
- * Operating Systems should automatically use their own inbuilt\r
- * CDC-ACM drivers.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */
\ No newline at end of file
+++ /dev/null
-; Windows LUFA Dual CDC Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version] \r
-Signature="$Windows NT$" \r
-Class=Ports\r
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
-Provider=%COMPANY% \r
-LayoutFile=layout.inf\r
-DriverVer=06/06/2006,1.0.0.0\r
-\r
-[Manufacturer] \r
-%MFGNAME% = ManufName\r
-\r
-[DestinationDirs] \r
-DefaultDestDir=12 \r
-\r
-[ManufName] \r
-%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_00\r
-%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_02\r
-\r
-;------------------------------------------------------------------------------\r
-; Windows 2000/XP Sections\r
-;------------------------------------------------------------------------------\r
-\r
-[Modem3.nt]\r
-CopyFiles=USBModemCopyFileSection\r
-AddReg=Modem3.nt.AddReg \r
-\r
-[USBModemCopyFileSection]\r
-usbser.sys,,,0x20\r
-\r
-[Modem3.nt.AddReg] \r
-HKR,,DevLoader,,*ntkern \r
-HKR,,NTMPDriver,,usbser.sys \r
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
-\r
-[Modem3.nt.Services] \r
-AddService=usbser, 0x00000002, DriverService\r
-\r
-[DriverService] \r
-DisplayName=%SERVICE%\r
-ServiceType=1\r
-StartType=3\r
-ErrorControl=1\r
-ServiceBinary=%12%\usbser.sys \r
-\r
-;------------------------------------------------------------------------------\r
-; String Definitions\r
-;------------------------------------------------------------------------------\r
-\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-MFGNAME="Dean Camera"\r
-Modem3="USB Virtual Serial Port" \r
-SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = DualCDC\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- * more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =\r
-{\r
- 0x06, 0x9c, 0xff, /* Usage Page (Vendor Defined) */\r
- 0x09, 0x01, /* Usage (Vendor Defined) */\r
- 0xa1, 0x01, /* Collection (Vendor Defined) */\r
- 0x09, 0x02, /* Usage (Vendor Defined) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0xff, /* Logical Maximum (255) */\r
- 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
- 0x09, 0x03, /* Usage (Vendor Defined) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0xff, /* Logical Maximum (255) */\r
- 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
- 0xc0 /* End Collection */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x204F,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 1,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x00,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .GenericHID = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalReportDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(GenericReport)\r
- },\r
-\r
- .GenericINEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = GENERIC_EPSIZE,\r
- .PollingIntervalMS = 0x02\r
- },\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Generic HID Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- case DTYPE_HID: \r
- Address = (void*)&ConfigurationDescriptor.GenericHID;\r
- Size = sizeof(USB_Descriptor_HID_t);\r
- break;\r
- case DTYPE_Report: \r
- Address = (void*)&GenericReport;\r
- Size = sizeof(GenericReport);\r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /** Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t Interface;\r
- USB_Descriptor_HID_t GenericHID;\r
- USB_Descriptor_Endpoint_t GenericINEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
-\r
- /* Macros: */\r
- /** Endpoint number of the Generic HID reporting IN endpoint. */\r
- #define GENERIC_IN_EPNUM 1\r
-\r
- /** Size in bytes of the Generic HID reporting endpoint. */\r
- #define GENERIC_EPSIZE 8\r
- \r
- /** Size in bytes of the Generic HID reports (including report ID byte). */\r
- #define GENERIC_REPORT_SIZE 8\r
- \r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Generic HID Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>GenericHID</ProjectName><Created>29-Mar-2009 23:19:24</Created><LastEdit>29-Mar-2009 23:19:40</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>29-Mar-2009 23:19:24</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\GenericHID\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>GenericHID.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>GenericHID.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>GenericHID.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-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20090313\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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the GenericHID demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "GenericHID.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- * passed to all HID Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Generic_HID_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .ReportINEndpointNumber = GENERIC_IN_EPNUM,\r
- .ReportINEndpointSize = GENERIC_EPSIZE,\r
- \r
- .ReportINBufferSize = GENERIC_REPORT_SIZE,\r
-\r
- .UsingReportProtocol = true,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
- \r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- for (;;)\r
- {\r
- USB_HID_USBTask(&Generic_HID_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- LEDs_Init();\r
- USB_Init();\r
-\r
- /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
- OCR0A = ((F_CPU / 64) / 1000);\r
- TCCR0A = (1 << WGM01);\r
- TCCR0B = ((1 << CS01) | (1 << CS00));\r
- TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_HID_ConfigureEndpoints(&Generic_HID_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_HID_ProcessControlPacket(&Generic_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
- if (Generic_HID_Interface.IdleMSRemaining)\r
- Generic_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report should be stored\r
- *\r
- * \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
- // Create generic HID report here\r
- \r
- return 0;\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report has been stored\r
- * \param ReportSize Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
- void* ReportData, uint16_t ReportSize)\r
-{\r
- // Process received generic HID report here\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for GenericHID.c.\r
- */\r
- \r
-#ifndef _GENERICHID_H_\r
-#define _GENERICHID_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
- #include <avr/interrupt.h>\r
- #include <stdbool.h>\r
- #include <string.h>\r
- \r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
-\r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
- void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
- void* ReportData, uint16_t ReportSize);\r
- \r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Generic HID Device\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Human Interface Device (HID)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>N/A</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Low Speed Mode, Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Generic HID device demonstration application. This gives a simple reference application\r
- * for implementing a generic HID device, using the basic USB HID drivers in all modern\r
- * OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
- * and from a USB Host, and by default transmits the last sent report back to the host.\r
- * \r
- * On start-up the system will automatically enumerate and function as a vendor HID device.\r
- * When controlled by a custom HID class application, reports can be sent and received by\r
- * both the standard data endpoint and control request methods defined in the HID specification.\r
- *\r
- * \section SSec_Options Project Options\r
- * \r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>GENERIC_REPORT_SIZE</td>\r
- * <td>Descriptors.h</td>\r
- * <td>This token defines the size of the device reports, both sent and received. The value must be an\r
- * integer ranging from 1 to 255.</td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = GenericHID\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- * more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =\r
-{\r
- 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
- 0x09, 0x04, /* Usage (Joystick) */\r
- 0xa1, 0x01, /* Collection (Application) */\r
- 0x09, 0x01, /* Usage (Pointer) */\r
- 0xa1, 0x00, /* Collection (Physical) */\r
- 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
- 0x09, 0x30, /* Usage (X) */\r
- 0x09, 0x31, /* Usage (Y) */\r
- 0x15, 0x9c, /* Logical Minimum (-100) */\r
- 0x25, 0x64, /* Logical Maximum (100) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x95, 0x02, /* Report Count (2) */\r
- 0x81, 0x82, /* Input (Data, Variable, Absolute, Volatile) */\r
- 0x05, 0x09, /* Usage Page (Button) */\r
- 0x09, 0x02, /* Usage (Button 2) */\r
- 0x09, 0x01, /* Usage (Button 1) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x01, /* Logical Maximum (1) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x95, 0x02, /* Report Count (2) */\r
- 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
- 0x75, 0x06, /* Report Size (6) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x81, 0x01, /* Input (Constant) */\r
- 0xc0, /* End Collection */\r
- 0xc0 /* End Collection */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2043,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 1,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x00,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .JoystickHID = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalReportDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(JoystickReport)\r
- },\r
-\r
- .JoystickEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = JOYSTICK_EPSIZE,\r
- .PollingIntervalMS = 0x02\r
- } \r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Joystick Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- case DTYPE_HID: \r
- Address = (void*)&ConfigurationDescriptor.JoystickHID;\r
- Size = sizeof(USB_Descriptor_HID_t);\r
- break;\r
- case DTYPE_Report: \r
- Address = (void*)&JoystickReport;\r
- Size = sizeof(JoystickReport);\r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t Interface;\r
- USB_Descriptor_HID_t JoystickHID;\r
- USB_Descriptor_Endpoint_t JoystickEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Macros: */\r
- /** Endpoint number of the Joystick HID reporting IN endpoint. */\r
- #define JOYSTICK_EPNUM 1\r
-\r
- /** Size in bytes of the Joystick HID reporting IN endpoint. */\r
- #define JOYSTICK_EPSIZE 8\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Joystick Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>Joystick</ProjectName><Created>30-Sep-2008 14:06:38</Created><LastEdit>30-Sep-2008 14:07:27</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:38</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\Demos\Joystick\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Joystick.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Joystick.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Joystick.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the Joystick demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "Joystick.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- * passed to all HID Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Joystick_HID_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .ReportINEndpointNumber = JOYSTICK_EPNUM,\r
- .ReportINEndpointSize = JOYSTICK_EPSIZE,\r
- \r
- .ReportINBufferSize = sizeof(USB_JoystickReport_Data_t),\r
-\r
- .UsingReportProtocol = true,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
- \r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- for (;;)\r
- {\r
- USB_HID_USBTask(&Joystick_HID_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- Buttons_Init();\r
- USB_Init();\r
-\r
- /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
- OCR0A = ((F_CPU / 64) / 1000);\r
- TCCR0A = (1 << WGM01);\r
- TCCR0B = ((1 << CS01) | (1 << CS00));\r
- TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_HID_ConfigureEndpoints(&Joystick_HID_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_HID_ProcessControlPacket(&Joystick_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
- if (Joystick_HID_Interface.IdleMSRemaining)\r
- Joystick_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report should be stored\r
- *\r
- * \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
- USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;\r
- \r
- uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
- uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
- if (JoyStatus_LCL & JOY_UP)\r
- JoystickReport->Y = -100;\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- JoystickReport->Y = 100;\r
-\r
- if (JoyStatus_LCL & JOY_RIGHT)\r
- JoystickReport->X = 100;\r
- else if (JoyStatus_LCL & JOY_LEFT)\r
- JoystickReport->X = -100;\r
-\r
- if (JoyStatus_LCL & JOY_PRESS)\r
- JoystickReport->Button = (1 << 1);\r
- \r
- if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
- JoystickReport->Button |= (1 << 0);\r
- \r
- return sizeof(USB_JoystickReport_Data_t);\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report has been stored\r
- * \param ReportSize Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
- void* ReportData, uint16_t ReportSize)\r
-{\r
- // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Joystick.c.\r
- */\r
- \r
-#ifndef _JOYSTICK_H_\r
-#define _JOYSTICK_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
- #include <string.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Buttons.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
- * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
- */\r
- typedef struct\r
- {\r
- int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */\r
- int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
- uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
- } USB_JoystickReport_Data_t;\r
- \r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
-\r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
- void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
- void* ReportData, uint16_t ReportSize);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Joystick Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Human Interface Device (HID)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>N/A</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Low Speed Mode, Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Joystick demonstration application. This gives a simple reference\r
- * application for implementing a USB Keyboard device, for USB Joysticks\r
- * using the standard Keyboard HID profile.\r
- * \r
- * This device will show up as a generic joystick device, with two buttons.\r
- * Pressing the joystick inwards is the first button, and the HWB button\r
- * is the second.\r
- * \r
- * Moving the joystick on the selected board moves the joystick location on\r
- * the host computer.\r
- * \r
- * Currently only single interface joysticks are supported.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */
\ No newline at end of file
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = Joystick\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- \r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- * more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
-{\r
- 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
- 0x09, 0x06, /* Usage (Keyboard) */\r
- 0xa1, 0x01, /* Collection (Application) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x95, 0x08, /* Report Count (8) */\r
- 0x05, 0x07, /* Usage Page (Key Codes) */\r
- 0x19, 0xe0, /* Usage Minimum (Keyboard LeftControl) */\r
- 0x29, 0xe7, /* Usage Maximum (Keyboard Right GUI) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x01, /* Logical Maximum (1) */\r
- 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x81, 0x03, /* Input (Const, Variable, Absolute) */\r
- 0x95, 0x05, /* Report Count (5) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x05, 0x08, /* Usage Page (LEDs) */\r
- 0x19, 0x01, /* Usage Minimum (Num Lock) */\r
- 0x29, 0x05, /* Usage Maximum (Kana) */\r
- 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x75, 0x03, /* Report Size (3) */\r
- 0x91, 0x03, /* Output (Const, Variable, Absolute) */\r
- 0x95, 0x06, /* Report Count (6) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x65, /* Logical Maximum (101) */\r
- 0x05, 0x07, /* Usage Page (Keyboard) */\r
- 0x19, 0x00, /* Usage Minimum (Reserved (no event indicated)) */\r
- 0x29, 0x65, /* Usage Maximum (Keyboard Application) */\r
- 0x81, 0x00, /* Input (Data, Array, Absolute) */\r
- 0xc0 /* End Collection */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2042,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 1,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x00,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x01,\r
- .Protocol = 0x01,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .KeyboardHID = \r
- { \r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalReportDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(KeyboardReport)\r
- },\r
- \r
- .KeyboardEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = KEYBOARD_EPSIZE,\r
- .PollingIntervalMS = 0x04\r
- },\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Denver Gingerich"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Keyboard Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device: \r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- case DTYPE_HID: \r
- Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
- Size = sizeof(USB_Descriptor_HID_t);\r
- break;\r
- case DTYPE_Report: \r
- Address = (void*)&KeyboardReport;\r
- Size = sizeof(KeyboardReport);\r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- \r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
-\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t Interface;\r
- USB_Descriptor_HID_t KeyboardHID;\r
- USB_Descriptor_Endpoint_t KeyboardEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Macros: */\r
- /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
- #define KEYBOARD_EPNUM 1\r
- \r
- /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */ \r
- #define KEYBOARD_EPSIZE 8\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Keyboard Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>Keyboard</ProjectName><Created>30-Sep-2008 13:59:29</Created><LastEdit>30-Sep-2008 14:00:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 13:59:29</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Keyboard.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Keyboard\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Keyboard.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Keyboard.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Keyboard.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><File00000><FileId>00000</FileId><FileName>makefile</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the Keyboard demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "Keyboard.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- * passed to all HID Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .ReportINEndpointNumber = KEYBOARD_EPNUM,\r
- .ReportINEndpointSize = KEYBOARD_EPSIZE,\r
-\r
- .ReportINBufferSize = sizeof(USB_KeyboardReport_Data_t),\r
-\r
- .IdleCount = 500,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- for (;;)\r
- {\r
- USB_HID_USBTask(&Keyboard_HID_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware()\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- Buttons_Init();\r
- USB_Init();\r
-\r
- /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
- OCR0A = ((F_CPU / 64) / 1000);\r
- TCCR0A = (1 << WGM01);\r
- TCCR0B = ((1 << CS01) | (1 << CS00));\r
- TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
- if (Keyboard_HID_Interface.IdleMSRemaining)\r
- Keyboard_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report should be stored\r
- *\r
- * \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
- USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
- \r
- uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
- uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
- if (JoyStatus_LCL & JOY_UP)\r
- KeyboardReport->KeyCode[0] = 0x04; // A\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- KeyboardReport->KeyCode[0] = 0x05; // B\r
-\r
- if (JoyStatus_LCL & JOY_LEFT)\r
- KeyboardReport->KeyCode[0] = 0x06; // C\r
- else if (JoyStatus_LCL & JOY_RIGHT)\r
- KeyboardReport->KeyCode[0] = 0x07; // D\r
-\r
- if (JoyStatus_LCL & JOY_PRESS)\r
- KeyboardReport->KeyCode[0] = 0x08; // E\r
- \r
- if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
- KeyboardReport->KeyCode[0] = 0x09; // F\r
- \r
- return sizeof(USB_KeyboardReport_Data_t);\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report has been stored\r
- * \param ReportSize Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
- void* ReportData, uint16_t ReportSize)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- uint8_t* LEDReport = (uint8_t*)ReportData;\r
-\r
- if (*LEDReport & 0x01) // NUM Lock\r
- LEDMask |= LEDS_LED1;\r
- \r
- if (*LEDReport & 0x02) // CAPS Lock\r
- LEDMask |= LEDS_LED3;\r
-\r
- if (*LEDReport & 0x04) // SCROLL Lock\r
- LEDMask |= LEDS_LED4;\r
- \r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Keyboard.c.\r
- */\r
-\r
-#ifndef _KEYBOARD_H_\r
-#define _KEYBOARD_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/interrupt.h>\r
- #include <avr/power.h>\r
- #include <stdbool.h>\r
- #include <string.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Buttons.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
- * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
- */\r
- typedef struct\r
- {\r
- uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
- uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
- uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
- } USB_KeyboardReport_Data_t;\r
- \r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
- void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
- void* ReportData, uint16_t ReportSize);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Keyboard Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Human Interface Device (HID)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>N/A</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Low Speed Mode, Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description:\r
- *\r
- * Keyboard demonstration application. This gives a simple reference application\r
- * for implementing a USB Keyboard using the basic USB HID drivers in all modern\r
- * OSes (i.e. no special drivers required). It is boot protocol compatible, and thus\r
- * works under compatible BIOS as if it was a native keyboard (e.g. PS/2).\r
- * \r
- * On start-up the system will automatically enumerate and function\r
- * as a keyboard when the USB connection to a host is present. To use\r
- * the keyboard example, manipulate the joystick to send the letters\r
- * a, b, c, d and e. See the USB HID documentation for more information\r
- * on sending keyboard event and key presses.\r
- *\r
- * \section SSec_Options Project Options\r
- * \r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = Keyboard\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- \r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- * more details on HID report descriptors.\r
- *\r
- * This descriptor describes the mouse HID interface's report structure.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
-{\r
- 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
- 0x09, 0x02, /* Usage (Mouse) */\r
- 0xA1, 0x01, /* Collection (Application) */\r
- 0x09, 0x01, /* Usage (Pointer) */\r
- 0xA1, 0x00, /* Collection (Physical) */\r
- 0x95, 0x03, /* Report Count (3) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x05, 0x09, /* Usage Page (Button) */\r
- 0x19, 0x01, /* Usage Minimum (Button 1) */\r
- 0x29, 0x03, /* Usage Maximum (Button 3) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x01, /* Logical Maximum (1) */\r
- 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x75, 0x05, /* Report Size (5) */\r
- 0x81, 0x01, /* Input (Constant) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x95, 0x02, /* Report Count (2) */\r
- 0x05, 0x01, /* Usage Page (Generic Desktop Control) */\r
- 0x09, 0x30, /* Usage X */\r
- 0x09, 0x31, /* Usage Y */\r
- 0x15, 0x81, /* Logical Minimum (-127) */\r
- 0x25, 0x7F, /* Logical Maximum (127) */\r
- 0x81, 0x06, /* Input (Data, Variable, Relative) */\r
- 0xC0, /* End Collection */\r
- 0xC0, /* End Collection */\r
-};\r
-\r
-/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
-{\r
- 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
- 0x09, 0x06, /* Usage (Keyboard) */\r
- 0xa1, 0x01, /* Collection (Application) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x95, 0x08, /* Report Count (8) */\r
- 0x05, 0x07, /* Usage Page (Key Codes) */\r
- 0x19, 0xe0, /* Usage Minimum (Keyboard LeftControl) */\r
- 0x29, 0xe7, /* Usage Maximum (Keyboard Right GUI) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x01, /* Logical Maximum (1) */\r
- 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x81, 0x03, /* Input (Const, Variable, Absolute) */\r
- 0x95, 0x05, /* Report Count (5) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x05, 0x08, /* Usage Page (LEDs) */\r
- 0x19, 0x01, /* Usage Minimum (Num Lock) */\r
- 0x29, 0x05, /* Usage Maximum (Kana) */\r
- 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x75, 0x03, /* Report Size (3) */\r
- 0x91, 0x03, /* Output (Const, Variable, Absolute) */\r
- 0x95, 0x06, /* Report Count (6) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x65, /* Logical Maximum (101) */\r
- 0x05, 0x07, /* Usage Page (Keyboard) */\r
- 0x19, 0x00, /* Usage Minimum (Reserved (no event indicated)) */\r
- 0x29, 0x65, /* Usage Maximum (Keyboard Application) */\r
- 0x81, 0x00, /* Input (Data, Array, Absolute) */\r
- 0xC0 /* End Collection */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x204D,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .KeyboardInterface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x00,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x01,\r
- .Protocol = 0x01,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .KeyboardHID = \r
- { \r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalReportDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(KeyboardReport)\r
- },\r
- \r
- .KeyboardInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = HID_EPSIZE,\r
- .PollingIntervalMS = 0x02\r
- },\r
-\r
- .MouseInterface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x01,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x01,\r
- .Protocol = 0x02,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .MouseHID = \r
- { \r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalReportDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(MouseReport)\r
- },\r
- \r
- .MouseInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_IN_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = HID_EPSIZE,\r
- .PollingIntervalMS = 0x02\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Mouse and Keyboard Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device: \r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- case DTYPE_HID: \r
- if (!(wIndex))\r
- {\r
- Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
- Size = sizeof(USB_Descriptor_HID_t);\r
- }\r
- else\r
- {\r
- Address = (void*)&ConfigurationDescriptor.MouseHID;\r
- Size = sizeof(USB_Descriptor_HID_t); \r
- }\r
- break;\r
- case DTYPE_Report: \r
- if (!(wIndex))\r
- {\r
- Address = (void*)&KeyboardReport;\r
- Size = sizeof(KeyboardReport);\r
- }\r
- else\r
- { \r
- Address = (void*)&MouseReport;\r
- Size = sizeof(MouseReport);\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- \r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t KeyboardInterface;\r
- USB_Descriptor_HID_t KeyboardHID;\r
- USB_Descriptor_Endpoint_t KeyboardInEndpoint;\r
- USB_Descriptor_Interface_t MouseInterface;\r
- USB_Descriptor_HID_t MouseHID;\r
- USB_Descriptor_Endpoint_t MouseInEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Macros: */\r
- /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
- #define KEYBOARD_IN_EPNUM 1\r
-\r
- /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
- #define MOUSE_IN_EPNUM 3\r
-\r
- /** Size in bytes of each of the HID reporting IN and OUT endpoints. */\r
- #define HID_EPSIZE 8\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Combined Keyboard/Mouse Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>KeyboardMouse</ProjectName><Created>30-Sep-2008 14:11:00</Created><LastEdit>30-Sep-2008 14:11:17</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:11:00</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\Demos\KeyboardMouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>KeyboardMouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>KeyboardMouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>KeyboardMouse.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- \r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the KeyboardMouse demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "KeyboardMouse.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- * passed to all HID Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another. This is for the keyboard HID\r
- * interface within the device.\r
- */\r
-USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .ReportINEndpointNumber = KEYBOARD_IN_EPNUM,\r
- .ReportINEndpointSize = HID_EPSIZE,\r
- \r
- .ReportINBufferSize = sizeof(USB_KeyboardReport_Data_t),\r
-\r
- .IdleCount = 500,\r
- };\r
- \r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- * passed to all HID Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another. This is for the mouse HID\r
- * interface within the device.\r
- */\r
-USB_ClassInfo_HID_t Mouse_HID_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .ReportINEndpointNumber = MOUSE_IN_EPNUM,\r
- .ReportINEndpointSize = HID_EPSIZE,\r
-\r
- .ReportINBufferSize = sizeof(USB_MouseReport_Data_t),\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- for (;;)\r
- {\r
- USB_HID_USBTask(&Keyboard_HID_Interface);\r
- USB_HID_USBTask(&Mouse_HID_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware()\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- USB_Init();\r
-\r
- /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
- OCR0A = ((F_CPU / 64) / 1000);\r
- TCCR0A = (1 << WGM01);\r
- TCCR0B = ((1 << CS01) | (1 << CS00));\r
- TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
- \r
- if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
- USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
- if (Keyboard_HID_Interface.IdleMSRemaining)\r
- Keyboard_HID_Interface.IdleMSRemaining--;\r
-\r
- if (Mouse_HID_Interface.IdleMSRemaining)\r
- Mouse_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report should be stored\r
- *\r
- * \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
- uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
- uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
- if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
- {\r
- USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
- \r
- /* If first board button not being held down, no keyboard report */\r
- if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))\r
- return 0;\r
- \r
- if (JoyStatus_LCL & JOY_UP)\r
- KeyboardReport->KeyCode[0] = 0x04; // A\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- KeyboardReport->KeyCode[0] = 0x05; // B\r
-\r
- if (JoyStatus_LCL & JOY_LEFT)\r
- KeyboardReport->KeyCode[0] = 0x06; // C\r
- else if (JoyStatus_LCL & JOY_RIGHT)\r
- KeyboardReport->KeyCode[0] = 0x07; // D\r
-\r
- if (JoyStatus_LCL & JOY_PRESS)\r
- KeyboardReport->KeyCode[0] = 0x08; // E\r
- \r
- return sizeof(USB_KeyboardReport_Data_t);\r
- }\r
- else\r
- {\r
- USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
-\r
- /* If first board button being held down, no mouse report */\r
- if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
- return 0;\r
- \r
- if (JoyStatus_LCL & JOY_UP)\r
- MouseReport->Y = -1;\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- MouseReport->Y = 1;\r
-\r
- if (JoyStatus_LCL & JOY_RIGHT)\r
- MouseReport->X = 1;\r
- else if (JoyStatus_LCL & JOY_LEFT)\r
- MouseReport->X = -1;\r
-\r
- if (JoyStatus_LCL & JOY_PRESS)\r
- MouseReport->Button = (1 << 0);\r
- \r
- return sizeof(USB_MouseReport_Data_t); \r
- }\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report has been stored\r
- * \param ReportSize Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
- void* ReportData, uint16_t ReportSize)\r
-{\r
- if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
- {\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- uint8_t* LEDReport = (uint8_t*)ReportData;\r
-\r
- if (*LEDReport & 0x01) // NUM Lock\r
- LEDMask |= LEDS_LED1;\r
- \r
- if (*LEDReport & 0x02) // CAPS Lock\r
- LEDMask |= LEDS_LED3;\r
-\r
- if (*LEDReport & 0x04) // SCROLL Lock\r
- LEDMask |= LEDS_LED4;\r
- \r
- LEDs_SetAllLEDs(LEDMask);\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
- \r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-#ifndef _KEYBOARD_MOUSE_H_\r
-#define _KEYBOARD_MOUSE_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
- #include <stdbool.h>\r
- #include <string.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Buttons.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Type Defines: */\r
- /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
- * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
- */\r
- typedef struct\r
- {\r
- uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
- uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
- uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
- } USB_KeyboardReport_Data_t;\r
-\r
- /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
- * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
- */\r
- typedef struct\r
- {\r
- uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
- int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
- int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
- } USB_MouseReport_Data_t;\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
- void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
- void* ReportData, uint16_t ReportSize);\r
- \r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Dual HID Keyboard and Mouse Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Human Interface Device (HID)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>N/A</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Low Speed Mode, Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Keyboard/Mouse demonstration application. This gives a simple reference\r
- * application for implementing a composite device containing both USB Keyboard\r
- * and USB Mouse functionality using the basic USB HID drivers in all modern OSes\r
- * (i.e. no special drivers required). This example uses two separate HID\r
- * interfaces for each function. It is boot protocol compatible, and thus works under\r
- * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).\r
- * \r
- * On start-up the system will automatically enumerate and function\r
- * as a keyboard when the USB connection to a host is present and the HWB is not\r
- * pressed. When enabled, manipulate the joystick to send the letters\r
- * a, b, c, d and e. See the USB HID documentation for more information\r
- * on sending keyboard event and key presses.\r
- * \r
- * When the HWB is pressed, the mouse mode is enabled. When enabled, move the\r
- * joystick to move the pointer, and push the joystick inwards to simulate a\r
- * left-button click.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = KeyboardMouse\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>AudioInput</ProjectName><Created>30-Sep-2008 14:03:00</Created><LastEdit>30-Sep-2008 14:03:28</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>AudioInput.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\</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>AudioInput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioInput.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>AudioInput.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\Demos\AudioInput\AudioInput.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Audio Input demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "AudioInput.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_Audio_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+ \r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
+ ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
+ \r
+ /* Start the ADC conversion in free running mode */\r
+ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and\r
+ * configures the sample update and PWM timers.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+\r
+ /* Sample reload timer initialization */\r
+ OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+ TCCR0A = (1 << WGM01); // CTC mode\r
+ TCCR0B = (1 << CS00); // Fcpu speed\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop the sample reload timer */\r
+ TCCR0B = 0;\r
+\r
+ /* Stop running audio and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup audio stream endpoint */\r
+ Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
+ ENDPOINT_DIR_IN, AUDIO_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the Audio class-specific\r
+ * requests) so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Process General and Audio specific control requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_SetInterface:\r
+ /* Set Interface is not handled by the library, as its function is application-specific */\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */\r
+ if (USB_ControlRequest.wValue)\r
+ {\r
+ /* Start audio task */\r
+ Scheduler_SetTaskMode(USB_Audio_Task, TASK_RUN);\r
+ }\r
+ else\r
+ {\r
+ /* Stop audio task */\r
+ Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP); \r
+ }\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+\r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the AudioInput_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the Audio interface, reading in ADC samples from the microphone, and them to the host. */\r
+TASK(USB_Audio_Task)\r
+{\r
+ /* Select the audio stream endpoint */\r
+ Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM);\r
+ \r
+ /* Check if the current endpoint can be written to and that the next sample should be stored */\r
+ if (Endpoint_IsINReady() && (TIFR0 & (1 << OCF0A)))\r
+ {\r
+ /* Clear the sample reload timer */\r
+ TIFR0 |= (1 << OCF0A);\r
+\r
+ /* Audio sample is ADC value scaled to fit the entire range */\r
+ int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());\r
+ \r
+#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)\r
+ /* Microphone is biased to half rail voltage, subtract the bias from the sample value */\r
+ AudioSample -= (SAMPLE_MAX_RANGE / 2));\r
+#endif\r
+\r
+ /* Write the sample to the buffer */\r
+ Endpoint_Write_Word_LE(AudioSample);\r
+\r
+ /* Check to see if the bank is now full */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ {\r
+ /* Send the full packet to the host */\r
+ Endpoint_ClearIN();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for AudioInput.c.\r
+ */\r
+ \r
+#ifndef _AUDIO_INPUT_H_\r
+#define _AUDIO_INPUT_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+ \r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Drivers/Peripheral/ADC.h> // ADC driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+\r
+ /* Macros: */\r
+ /** ADC channel number for the microphone input. */\r
+ #define MIC_IN_ADC_CHANNEL 2\r
+ \r
+ /** Maximum ADC sample value for the microphone input. */\r
+ #define SAMPLE_MAX_RANGE 0xFFFF\r
+\r
+ /** Maximum ADC range for the microphone input. */\r
+ #define ADC_MAX_RANGE 0x3FF\r
+\r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum AudioInput_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+\r
+ /* Task Definitions: */\r
+ TASK(USB_Audio_Task);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Audio Input Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Audio Class</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Standard Audio Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Audio Class Specification</td>\r
+ * <td>USBIF Audio Class Terminal Types Specification</td>\r
+ * <td>USBIF Audio Data Formats Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Audio demonstration application. This gives a simple reference\r
+ * application for implementing a USB Audio Input device using the\r
+ * basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ * required).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a USB microphone. Incoming audio from the ADC channel 1 will\r
+ * be sampled and sent to the host computer.\r
+ * \r
+ * To use, connect a microphone to the ADC channel 2.\r
+ * \r
+ * Under Windows, if a driver request dialogue pops up, select the option\r
+ * to automatically install the appropriate drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ * <td>Descriptors.h</td>\r
+ * <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(02.00),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2047,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+\r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .AudioControlInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR \r
+ },\r
+ \r
+ .AudioControlInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Header,\r
+ \r
+ .ACSpecification = VERSION_BCD(01.00),\r
+ .TotalLength = (sizeof(USB_AudioInterface_AC_t) +\r
+ sizeof(USB_AudioInputTerminal_t) +\r
+ sizeof(USB_AudioOutputTerminal_t)),\r
+ \r
+ .InCollection = 1,\r
+ .InterfaceNumbers = {1}, \r
+ },\r
+\r
+ .InputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputTerminal,\r
+ \r
+ .TerminalID = 0x01,\r
+ .TerminalType = TERMINAL_IN_MIC,\r
+ .AssociatedOutputTerminal = 0x00,\r
+ \r
+ .TotalChannels = 1,\r
+ .ChannelConfig = 0,\r
+ \r
+ .ChannelStrIndex = NO_DESCRIPTOR,\r
+ .TerminalStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .OutputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputTerminal,\r
+ \r
+ .TerminalID = 0x02,\r
+ .TerminalType = TERMINAL_STREAMING,\r
+ .AssociatedInputTerminal = 0x00,\r
+ \r
+ .SourceID = 0x01,\r
+ \r
+ .TerminalStrIndex = NO_DESCRIPTOR \r
+ },\r
+\r
+ .AudioStreamInterface_Alt0 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .AudioStreamInterface_Alt1 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 1,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .AudioStreamInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .TerminalLink = 0x02,\r
+ \r
+ .FrameDelay = 1,\r
+ .AudioFormat = 0x0001\r
+ },\r
+ \r
+ .AudioFormat = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Format,\r
+\r
+ .FormatType = 0x01,\r
+ .Channels = 0x01,\r
+ \r
+ .SubFrameSize = 0x02,\r
+ .BitResolution = 16,\r
+ .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),\r
+ \r
+ .SampleFrequencies = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+ },\r
+ \r
+ .AudioEndpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),\r
+ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = AUDIO_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 1\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .AudioEndpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .Attributes = 0x00,\r
+ \r
+ .LockDelayUnits = 0x00,\r
+ .LockDelay = 0x0000\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Audio In Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
+ #define DTYPE_AudioInterface 0x24\r
+\r
+ /** Descriptor header constant to indicate a Audio class endpoint descriptor. */\r
+ #define DTYPE_AudioEndpoint 0x25\r
+\r
+ /** Audio class descriptor subtype value for a Audio class specific header descriptor. */\r
+ #define DSUBTYPE_Header 0x01\r
+\r
+ /** Audio class descriptor subtype value for an Output Terminal Audio class specific descriptor. */\r
+ #define DSUBTYPE_InputTerminal 0x02\r
+\r
+ /** Audio class descriptor subtype value for an Input Terminal Audio class specific descriptor. */\r
+ #define DSUBTYPE_OutputTerminal 0x03\r
+\r
+ /** Audio class descriptor subtype value for a Feature Unit Audio class specific descriptor. */\r
+ #define DSUBTYPE_FeatureUnit 0x06\r
+\r
+ /** Audio class descriptor subtype value for a general Audio class specific descriptor. */\r
+ #define DSUBTYPE_General 0x01\r
+\r
+ /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */\r
+ #define DSUBTYPE_Format 0x02\r
+ \r
+ //@{\r
+ /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+\r
+ #define CHANNEL_LEFT_FRONT (1 << 0)\r
+ #define CHANNEL_RIGHT_FRONT (1 << 1)\r
+ #define CHANNEL_CENTER_FRONT (1 << 2)\r
+ #define CHANNEL_LOW_FREQ_ENHANCE (1 << 3)\r
+ #define CHANNEL_LEFT_SURROUND (1 << 4)\r
+ #define CHANNEL_RIGHT_SURROUND (1 << 5)\r
+ #define CHANNEL_LEFT_OF_CENTER (1 << 6)\r
+ #define CHANNEL_RIGHT_OF_CENTER (1 << 7)\r
+ #define CHANNEL_SURROUND (1 << 8)\r
+ #define CHANNEL_SIDE_LEFT (1 << 9)\r
+ #define CHANNEL_SIDE_RIGHT (1 << 10)\r
+ #define CHANNEL_TOP (1 << 11)\r
+ //@}\r
+\r
+ //@{\r
+ /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
+\r
+ #define FEATURE_MUTE (1 << 0)\r
+ #define FEATURE_VOLUME (1 << 1)\r
+ #define FEATURE_BASS (1 << 2)\r
+ #define FEATURE_MID (1 << 3)\r
+ #define FEATURE_TREBLE (1 << 4)\r
+ #define FEATURE_GRAPHIC_EQUALIZER (1 << 5)\r
+ #define FEATURE_AUTOMATIC_GAIN (1 << 6)\r
+ #define FEATURE_DELAY (1 << 7)\r
+ #define FEATURE_BASS_BOOST (1 << 8)\r
+ #define FEATURE_BASS_LOUDNESS (1 << 9)\r
+ //@}\r
+\r
+ //@{\r
+ /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+ \r
+ #define TERMINAL_UNDEFINED 0x0100\r
+ #define TERMINAL_STREAMING 0x0101\r
+ #define TERMINAL_VENDOR 0x01FF\r
+ #define TERMINAL_IN_UNDEFINED 0x0200\r
+ #define TERMINAL_IN_MIC 0x0201\r
+ #define TERMINAL_IN_DESKTOP_MIC 0x0202\r
+ #define TERMINAL_IN_PERSONAL_MIC 0x0203\r
+ #define TERMINAL_IN_OMNIDIR_MIC 0x0204\r
+ #define TERMINAL_IN_MIC_ARRAY 0x0205\r
+ #define TERMINAL_IN_PROCESSING_MIC 0x0206\r
+ #define TERMINAL_IN_OUT_UNDEFINED 0x0300\r
+ #define TERMINAL_OUT_SPEAKER 0x0301\r
+ #define TERMINAL_OUT_HEADPHONES 0x0302\r
+ #define TERMINAL_OUT_HEAD_MOUNTED 0x0303\r
+ #define TERMINAL_OUT_DESKTOP 0x0304\r
+ #define TERMINAL_OUT_ROOM 0x0305\r
+ #define TERMINAL_OUT_COMMUNICATION 0x0306\r
+ #define TERMINAL_OUT_LOWFREQ 0x0307\r
+ //@}\r
+\r
+ /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.\r
+ *\r
+ * \param freq Required audio sampling frequency in HZ\r
+ */\r
+ #define SAMPLE_FREQ(freq) {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}\r
+ \r
+ /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+ * accepts only filled endpoint packets of audio samples.\r
+ */\r
+ #define EP_ACCEPTS_ONLY_FULL_PACKETS (1 << 7)\r
+\r
+ /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+ * will accept partially filled endpoint packets of audio samples.\r
+ */\r
+ #define EP_ACCEPTS_SMALL_PACKETS (0 << 7)\r
+\r
+ #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+ #define AUDIO_STREAM_EPNUM 1\r
+ #else\r
+ #define AUDIO_STREAM_EPNUM 3 \r
+ #endif\r
+ \r
+ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+ * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+ * USB AVR models will result in unavoidable distorted output.\r
+ */\r
+ #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+ \r
+ /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+ #define AUDIO_SAMPLE_FREQUENCY 48000\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to\r
+ * supply extra information about the audio device's layout to the host. See the USB Audio specification for more\r
+ * details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint16_t ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */\r
+ uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */\r
+ \r
+ uint8_t InCollection; /**< Total number of audio class interfaces within this device */\r
+ uint8_t InterfaceNumbers[1]; /**< Interface numbers of each audio interface */\r
+ } USB_AudioInterface_AC_t;\r
+ \r
+ /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features\r
+ * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio\r
+ * specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t UnitID; /**< ID value of this feature unit - must be a unique value within the device */\r
+ uint8_t SourceID; /**< Source ID value of the audio source input into this feature unit */\r
+ \r
+ uint8_t ControlSize; /**< Size of each element in the ChanelControlls array */\r
+ uint8_t ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */\r
+ \r
+ uint8_t FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_AudioFeatureUnit_t;\r
+\r
+ /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device\r
+ * contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,\r
+ * a USB endpoint). See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+ uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals\r
+ * such as the speaker and microphone of a phone handset\r
+ */\r
+ uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */\r
+ uint16_t ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */\r
+ \r
+ uint8_t ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */\r
+ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_AudioInputTerminal_t;\r
+\r
+ /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device\r
+ * contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,\r
+ * a USB endpoint). See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+ uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals\r
+ * such as the speaker and microphone of a phone handset\r
+ */\r
+ uint8_t SourceID; /**< ID value of the unit this terminal's audio is sourced from */\r
+ \r
+ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_AudioOutputTerminal_t;\r
+ \r
+ /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host\r
+ * how audio streams within the device are formatted. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t TerminalLink; /**< ID value of the output terminal this descriptor is describing */\r
+ \r
+ uint8_t FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */\r
+ uint16_t AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */\r
+ } USB_AudioInterface_AS_t;\r
+ \r
+ /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,\r
+ * this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint16_t LowWord; /**< Low 16 bits of the 24-bit value */\r
+ uint8_t HighByte; /**< Upper 8 bits of the 24-bit value */\r
+ } AudioSampleFreq_t;\r
+\r
+ /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details\r
+ * about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used\r
+ * in the device's audio streams. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint8_t FormatType; /**< Format of the audio stream, see Audio Device Formats specification */\r
+ uint8_t Channels; /**< Total number of discrete channels in the stream */\r
+ \r
+ uint8_t SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */\r
+ uint8_t BitResolution; /**< Bits of resolution of each channel's samples in the stream */\r
+\r
+ uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */ \r
+ AudioSampleFreq_t SampleFrequencies[1]; /**< Sample frequencies supported by the device */\r
+ } USB_AudioFormat_t;\r
+ \r
+ /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
+ * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
+\r
+ uint8_t Refresh; /**< Always set to zero */\r
+ uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
+ } USB_AudioStreamEndpoint_Std_t;\r
+ \r
+ /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information\r
+ * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio\r
+ * class specific extended endpoint descriptor. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */\r
+\r
+ uint8_t LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */\r
+ uint16_t LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */\r
+ } USB_AudioStreamEndpoint_Spc_t;\r
+ \r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t AudioControlInterface;\r
+ USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
+ USB_AudioInputTerminal_t InputTerminal;\r
+ USB_AudioOutputTerminal_t OutputTerminal;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt0;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt1;\r
+ USB_AudioInterface_AS_t AudioStreamInterface_SPC;\r
+ USB_AudioFormat_t AudioFormat;\r
+ USB_AudioStreamEndpoint_Std_t AudioEndpoint;\r
+ USB_AudioStreamEndpoint_Spc_t AudioEndpoint_SPC;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Audio Input Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioInput\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>AudioOutput</ProjectName><Created>30-Sep-2008 14:03:51</Created><LastEdit>30-Sep-2008 14:04:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:51</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\Demos\AudioOutput\</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>AudioOutput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioOutput.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>AudioOutput.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Audio Output demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+ \r
+#include "AudioOutput.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_Audio_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and\r
+ * configures the sample update and PWM timers.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+ \r
+ /* Sample reload timer initialization */\r
+ OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+ TCCR0A = (1 << WGM01); // CTC mode\r
+ TCCR0B = (1 << CS00); // Fcpu speed\r
+ \r
+#if defined(AUDIO_OUT_MONO)\r
+ /* Set speaker as output */\r
+ DDRC |= (1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+ /* Set speakers as outputs */\r
+ DDRC |= ((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+ /* Set PORTC as outputs */\r
+ DDRC |= 0xFF;\r
+#endif\r
+\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+ /* PWM speaker timer initialization */\r
+ TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)\r
+ | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP\r
+ TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed\r
+#endif \r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop the timers */\r
+ TCCR0B = 0;\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+ TCCRxB = 0;\r
+#endif \r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+ /* Set speaker as input to reduce current draw */\r
+ DDRC &= ~(1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+ /* Set speakers as inputs to reduce current draw */\r
+ DDRC &= ~((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+ /* Set PORTC low */\r
+ PORTC = 0x00;\r
+#endif\r
+\r
+ /* Stop running audio and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup audio stream endpoint */\r
+ Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
+ ENDPOINT_DIR_OUT, AUDIO_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the Audio class-specific\r
+ * requests) so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Process General and Audio specific control requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_SetInterface:\r
+ /* Set Interface is not handled by the library, as its function is application-specific */\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */\r
+ if (USB_ControlRequest.wValue)\r
+ {\r
+ /* Start audio task */\r
+ Scheduler_SetTaskMode(USB_Audio_Task, TASK_RUN);\r
+ }\r
+ else\r
+ {\r
+ /* Stop audio task */\r
+ Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP); \r
+ }\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+\r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the AudioOutput_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the Audio interface, reading in audio samples from the host, and outputting them to the speakers/LEDs as\r
+ * desired.\r
+ */\r
+TASK(USB_Audio_Task)\r
+{\r
+ /* Select the audio stream endpoint */\r
+ Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM);\r
+ \r
+ /* Check if the current endpoint can be read from (contains a packet) and that the next sample should be read */\r
+ if (Endpoint_IsOUTReceived() && (TIFR0 & (1 << OCF0A)))\r
+ {\r
+ /* Clear the sample reload timer */\r
+ TIFR0 |= (1 << OCF0A);\r
+\r
+ /* Retrieve the signed 16-bit left and right audio samples */\r
+ int16_t LeftSample_16Bit = (int16_t)Endpoint_Read_Word_LE();\r
+ int16_t RightSample_16Bit = (int16_t)Endpoint_Read_Word_LE();\r
+\r
+ /* Check to see if the bank is now empty */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ {\r
+ /* Acknowledge the packet, clear the bank ready for the next packet */\r
+ Endpoint_ClearOUT();\r
+ }\r
+\r
+ /* Massage signed 16-bit left and right audio samples into signed 8-bit */\r
+ int8_t LeftSample_8Bit = (LeftSample_16Bit >> 8);\r
+ int8_t RightSample_8Bit = (RightSample_16Bit >> 8);\r
+ \r
+#if defined(AUDIO_OUT_MONO)\r
+ /* Mix the two channels together to produce a mono, 8-bit sample */\r
+ int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
+\r
+ /* Load the sample into the PWM timer channel */\r
+ OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_STEREO)\r
+ /* Load the dual 8-bit samples into the PWM timer channels */\r
+ OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7));\r
+ OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+ /* Mix the two channels together to produce a mono, 8-bit sample */\r
+ int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
+\r
+ PORTC = MixedSample_8Bit;\r
+#else\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+\r
+ /* Make left channel positive (absolute) */\r
+ if (LeftSample_8Bit < 0)\r
+ LeftSample_8Bit = -LeftSample_8Bit;\r
+\r
+ /* Make right channel positive (absolute) */\r
+ if (RightSample_8Bit < 0)\r
+ RightSample_8Bit = -RightSample_8Bit;\r
+\r
+ /* Set first LED based on sample value */\r
+ if (LeftSample_8Bit < ((128 / 8) * 1))\r
+ LEDMask |= LEDS_LED2;\r
+ else if (LeftSample_8Bit < ((128 / 8) * 3))\r
+ LEDMask |= (LEDS_LED1 | LEDS_LED2);\r
+ else\r
+ LEDMask |= LEDS_LED1;\r
+\r
+ /* Set second LED based on sample value */\r
+ if (RightSample_8Bit < ((128 / 8) * 1))\r
+ LEDMask |= LEDS_LED4;\r
+ else if (RightSample_8Bit < ((128 / 8) * 3))\r
+ LEDMask |= (LEDS_LED3 | LEDS_LED4);\r
+ else\r
+ LEDMask |= LEDS_LED3;\r
+ \r
+ LEDs_SetAllLEDs(LEDMask);\r
+#endif\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for AudioOutput.c.\r
+ */\r
+\r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+ \r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ \r
+ /* Macros: */\r
+ #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #define TCCRxA TCCR3A\r
+ #define TCCRxB TCCR3B\r
+ #define OCRxA OCR3A\r
+ #define OCRxB OCR3B\r
+ #define WGMx0 WGM30\r
+ #define WGMx2 WGM32\r
+ #define COMxA1 COM3A1\r
+ #define COMxA0 COM3A0\r
+ #define COMxB1 COM3B1\r
+ #define COMxB0 COM3B0\r
+ #define CSx0 CS30\r
+ #else\r
+ /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+ #define TCCRxA TCCR1A\r
+\r
+ /** Timer count register used for right channel PWM audio output */\r
+ #define TCCRxB TCCR1B\r
+\r
+ /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+ #define OCRxA OCR1A\r
+\r
+ /** Timer compare register used for right channel PWM audio output */\r
+ #define OCRxB OCR1B\r
+\r
+ /** Timer control register mask used to select PWM mode */\r
+ #define WGMx0 WGM10\r
+\r
+ /** Timer control register mask used to select PWM mode */\r
+ #define WGMx2 WGM12\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxA1 COM1A1\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxA0 COM1A0\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxB1 COM1B1\r
+\r
+ /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+ #define COMxB0 COM1B0\r
+\r
+ /** Timer control register mask used to start the timer at Fcpu clock rate */\r
+ #define CSx0 CS10\r
+ #endif\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum AudioOutput_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+\r
+ /* Task Definitions: */\r
+ TASK(USB_Audio_Task);\r
+ \r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+ \r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Audio Output Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Audio Class</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Standard Audio Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Audio Class Specification</td>\r
+ * <td>USBIF Audio Class Terminal Types Specification</td>\r
+ * <td>USBIF Audio Data Formats Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Audio demonstration application. This gives a simple reference\r
+ * application for implementing a USB Audio Output device using the\r
+ * basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ * required).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a USB speaker. Incoming audio will output in 8-bit PWM onto\r
+ * the timer output (timer 3 for the AT90USBXXX6/7 USB AVRs, timer 1 for\r
+ * the AT90USBXXX2 controller AVRs) compare channel A for AUDIO_OUT_MONO\r
+ * mode, on channels A and B for AUDIO_OUT_STEREO and on the board LEDs\r
+ * for AUDIO_OUT_LEDS mode. Decouple audio outputs with a capacitor and\r
+ * attach to a speaker to hear the audio.\r
+ * \r
+ * Under Windows, if a driver request dialogue pops up, select the option\r
+ * to automatically install the appropriate drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_STEREO</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_MONO</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_LEDS</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in stereo to the board LEDs.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_OUT_PORTC</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an\r
+ * external DAC.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ * <td>Descriptors.h</td>\r
+ * <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(02.00),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2046,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+\r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .AudioControlInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR \r
+ },\r
+ \r
+ .AudioControlInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Header,\r
+ \r
+ .ACSpecification = VERSION_BCD(01.00),\r
+ .TotalLength = (sizeof(USB_AudioInterface_AC_t) +\r
+ sizeof(USB_AudioInputTerminal_t) +\r
+ sizeof(USB_AudioOutputTerminal_t)),\r
+ \r
+ .InCollection = 1,\r
+ .InterfaceNumbers = {1}, \r
+ },\r
+\r
+ .InputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputTerminal,\r
+ \r
+ .TerminalID = 0x01,\r
+ .TerminalType = TERMINAL_STREAMING,\r
+ .AssociatedOutputTerminal = 0x00,\r
+ \r
+ .TotalChannels = 2,\r
+ .ChannelConfig = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT),\r
+ \r
+ .ChannelStrIndex = NO_DESCRIPTOR,\r
+ .TerminalStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .OutputTerminal = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputTerminal,\r
+ \r
+ .TerminalID = 0x02,\r
+ .TerminalType = TERMINAL_OUT_SPEAKER,\r
+ .AssociatedInputTerminal = 0x00,\r
+ \r
+ .SourceID = 0x01,\r
+ \r
+ .TerminalStrIndex = NO_DESCRIPTOR \r
+ },\r
+\r
+ .AudioStreamInterface_Alt0 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .AudioStreamInterface_Alt1 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 1,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .AudioStreamInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .TerminalLink = 0x01,\r
+ \r
+ .FrameDelay = 1,\r
+ .AudioFormat = 0x0001\r
+ },\r
+ \r
+ .AudioFormat = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Format,\r
+\r
+ .FormatType = 0x01,\r
+ .Channels = 0x02,\r
+ \r
+ .SubFrameSize = 0x02,\r
+ .BitResolution = 16,\r
+\r
+ .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)), \r
+ .SampleFrequencies = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+ },\r
+ \r
+ .AudioEndpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | AUDIO_STREAM_EPNUM),\r
+ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = AUDIO_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 1\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .AudioEndpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+ \r
+ .Attributes = EP_ACCEPTS_SMALL_PACKETS,\r
+ \r
+ .LockDelayUnits = 0x00,\r
+ .LockDelay = 0x0000\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Audio Out Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration:\r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00:\r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
+ #define DTYPE_AudioInterface 0x24\r
+\r
+ /** Descriptor header constant to indicate a Audio class endpoint descriptor. */\r
+ #define DTYPE_AudioEndpoint 0x25\r
+\r
+ /** Audio class descriptor subtype value for a Audio class specific header descriptor. */\r
+ #define DSUBTYPE_Header 0x01\r
+\r
+ /** Audio class descriptor subtype value for an Output Terminal Audio class specific descriptor. */\r
+ #define DSUBTYPE_InputTerminal 0x02\r
+\r
+ /** Audio class descriptor subtype value for an Input Terminal Audio class specific descriptor. */\r
+ #define DSUBTYPE_OutputTerminal 0x03\r
+\r
+ /** Audio class descriptor subtype value for a Feature Unit Audio class specific descriptor. */\r
+ #define DSUBTYPE_FeatureUnit 0x06\r
+\r
+ /** Audio class descriptor subtype value for a general Audio class specific descriptor. */\r
+ #define DSUBTYPE_General 0x01\r
+\r
+ /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */\r
+ #define DSUBTYPE_Format 0x02\r
+ \r
+ //@{\r
+ /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+\r
+ #define CHANNEL_LEFT_FRONT (1 << 0)\r
+ #define CHANNEL_RIGHT_FRONT (1 << 1)\r
+ #define CHANNEL_CENTER_FRONT (1 << 2)\r
+ #define CHANNEL_LOW_FREQ_ENHANCE (1 << 3)\r
+ #define CHANNEL_LEFT_SURROUND (1 << 4)\r
+ #define CHANNEL_RIGHT_SURROUND (1 << 5)\r
+ #define CHANNEL_LEFT_OF_CENTER (1 << 6)\r
+ #define CHANNEL_RIGHT_OF_CENTER (1 << 7)\r
+ #define CHANNEL_SURROUND (1 << 8)\r
+ #define CHANNEL_SIDE_LEFT (1 << 9)\r
+ #define CHANNEL_SIDE_RIGHT (1 << 10)\r
+ #define CHANNEL_TOP (1 << 11)\r
+ //@}\r
+\r
+ //@{\r
+ /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
+\r
+ #define FEATURE_MUTE (1 << 0)\r
+ #define FEATURE_VOLUME (1 << 1)\r
+ #define FEATURE_BASS (1 << 2)\r
+ #define FEATURE_MID (1 << 3)\r
+ #define FEATURE_TREBLE (1 << 4)\r
+ #define FEATURE_GRAPHIC_EQUALIZER (1 << 5)\r
+ #define FEATURE_AUTOMATIC_GAIN (1 << 6)\r
+ #define FEATURE_DELAY (1 << 7)\r
+ #define FEATURE_BASS_BOOST (1 << 8)\r
+ #define FEATURE_BASS_LOUDNESS (1 << 9)\r
+ //@}\r
+\r
+ //@{\r
+ /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+ \r
+ #define TERMINAL_UNDEFINED 0x0100\r
+ #define TERMINAL_STREAMING 0x0101\r
+ #define TERMINAL_VENDOR 0x01FF\r
+ #define TERMINAL_IN_UNDEFINED 0x0200\r
+ #define TERMINAL_IN_MIC 0x0201\r
+ #define TERMINAL_IN_DESKTOP_MIC 0x0202\r
+ #define TERMINAL_IN_PERSONAL_MIC 0x0203\r
+ #define TERMINAL_IN_OMNIDIR_MIC 0x0204\r
+ #define TERMINAL_IN_MIC_ARRAY 0x0205\r
+ #define TERMINAL_IN_PROCESSING_MIC 0x0206\r
+ #define TERMINAL_IN_OUT_UNDEFINED 0x0300\r
+ #define TERMINAL_OUT_SPEAKER 0x0301\r
+ #define TERMINAL_OUT_HEADPHONES 0x0302\r
+ #define TERMINAL_OUT_HEAD_MOUNTED 0x0303\r
+ #define TERMINAL_OUT_DESKTOP 0x0304\r
+ #define TERMINAL_OUT_ROOM 0x0305\r
+ #define TERMINAL_OUT_COMMUNICATION 0x0306\r
+ #define TERMINAL_OUT_LOWFREQ 0x0307\r
+ //@}\r
+\r
+ /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.\r
+ *\r
+ * \param freq Required audio sampling frequency in HZ\r
+ */\r
+ #define SAMPLE_FREQ(freq) {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}\r
+ \r
+ /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+ * accepts only filled endpoint packets of audio samples.\r
+ */\r
+ #define EP_ACCEPTS_ONLY_FULL_PACKETS (1 << 7)\r
+\r
+ /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+ * will accept partially filled endpoint packets of audio samples.\r
+ */\r
+ #define EP_ACCEPTS_SMALL_PACKETS (0 << 7)\r
+\r
+ #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+ #define AUDIO_STREAM_EPNUM 1\r
+ #else\r
+ #define AUDIO_STREAM_EPNUM 3 \r
+ #endif\r
+ \r
+ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+ * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+ * USB AVR models will result in unavoidable distorted output.\r
+ */\r
+ #define AUDIO_STREAM_EPSIZE ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+ \r
+ /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+ #define AUDIO_SAMPLE_FREQUENCY 48000\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to\r
+ * supply extra information about the audio device's layout to the host. See the USB Audio specification for more\r
+ * details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint16_t ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */\r
+ uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */\r
+ \r
+ uint8_t InCollection; /**< Total number of audio class interfaces within this device */\r
+ uint8_t InterfaceNumbers[1]; /**< Interface numbers of each audio interface */\r
+ } USB_AudioInterface_AC_t;\r
+ \r
+ /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features\r
+ * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio\r
+ * specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t UnitID; /**< ID value of this feature unit - must be a unique value within the device */\r
+ uint8_t SourceID; /**< Source ID value of the audio source input into this feature unit */\r
+ \r
+ uint8_t ControlSize; /**< Size of each element in the ChanelControlls array */\r
+ uint8_t ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */\r
+ \r
+ uint8_t FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_AudioFeatureUnit_t;\r
+\r
+ /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device\r
+ * contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,\r
+ * a USB endpoint). See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+ uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals\r
+ * such as the speaker and microphone of a phone handset\r
+ */\r
+ uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */\r
+ uint16_t ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */\r
+ \r
+ uint8_t ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */\r
+ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_AudioInputTerminal_t;\r
+\r
+ /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device\r
+ * contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,\r
+ * a USB endpoint). See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+ uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals\r
+ * such as the speaker and microphone of a phone handset\r
+ */\r
+ uint8_t SourceID; /**< ID value of the unit this terminal's audio is sourced from */\r
+ \r
+ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_AudioOutputTerminal_t;\r
+ \r
+ /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host\r
+ * how audio streams within the device are formatted. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t TerminalLink; /**< ID value of the output terminal this descriptor is describing */\r
+ \r
+ uint8_t FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */\r
+ uint16_t AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */\r
+ } USB_AudioInterface_AS_t;\r
+ \r
+ /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,\r
+ * this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint16_t LowWord; /**< Low 16 bits of the 24-bit value */\r
+ uint8_t HighByte; /**< Upper 8 bits of the 24-bit value */\r
+ } AudioSampleFreq_t;\r
+\r
+ /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details\r
+ * about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used\r
+ * in the device's audio streams. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint8_t FormatType; /**< Format of the audio stream, see Audio Device Formats specification */\r
+ uint8_t Channels; /**< Total number of discrete channels in the stream */\r
+ \r
+ uint8_t SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */\r
+ uint8_t BitResolution; /**< Bits of resolution of each channel's samples in the stream */\r
+\r
+ uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */ \r
+ AudioSampleFreq_t SampleFrequencies[1]; /**< Sample frequencies supported by the device */\r
+ } USB_AudioFormat_t;\r
+ \r
+ /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
+ * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
+\r
+ uint8_t Refresh; /**< Always set to zero */\r
+ uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
+ } USB_AudioStreamEndpoint_Std_t;\r
+ \r
+ /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information\r
+ * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio\r
+ * class specific extended endpoint descriptor. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint8_t Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */\r
+\r
+ uint8_t LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */\r
+ uint16_t LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */\r
+ } USB_AudioStreamEndpoint_Spc_t; \r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t AudioControlInterface;\r
+ USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
+ USB_AudioInputTerminal_t InputTerminal;\r
+ USB_AudioOutputTerminal_t OutputTerminal;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt0;\r
+ USB_Descriptor_Interface_t AudioStreamInterface_Alt1;\r
+ USB_AudioInterface_AS_t AudioStreamInterface_SPC;\r
+ USB_AudioFormat_t AudioFormat;\r
+ USB_AudioStreamEndpoint_Std_t AudioEndpoint;\r
+ USB_AudioStreamEndpoint_Spc_t AudioEndpoint_SPC;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Audio Output Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = YES\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioOutput\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DAUDIO_OUT_STEREO\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>CDC</ProjectName><Created>30-Sep-2008 14:04:34</Created><LastEdit>30-Sep-2008 14:04:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:04:34</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\Demos\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>CDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>CDC.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>CDC.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the CDC demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "CDC.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = CDC_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Globals: */\r
+/** Contains the current baud rate and other settings of the virtual serial port. While this demo does not use\r
+ * the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
+ * upon request or the host will assume the device is non-functional.\r
+ *\r
+ * These values are set by the host via a class-specific request, however they are not required to be used accurately.\r
+ * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
+ * serial link characteristics and instead sends and receives data in endpoint streams.\r
+ */\r
+CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,\r
+ .CharFormat = OneStopBit,\r
+ .ParityType = Parity_None,\r
+ .DataBits = 8 };\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed upwards. */\r
+char JoystickUpString[] = "Joystick Up\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed downward. */\r
+char JoystickDownString[] = "Joystick Down\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed left. */\r
+char JoystickLeftString[] = "Joystick Left\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed right. */\r
+char JoystickRightString[] = "Joystick Right\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed inwards. */\r
+char JoystickPressedString[] = "Joystick Pressed\r\n";\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management and CDC management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running CDC and USB management tasks */\r
+ Scheduler_SetTaskMode(CDC_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the CDC management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup CDC Notification, Rx and Tx Endpoints */\r
+ Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+ \r
+ /* Start CDC task */\r
+ Scheduler_SetTaskMode(CDC_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the CDC control commands,\r
+ * which are all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ uint8_t* LineCodingData = (uint8_t*)&LineCoding;\r
+\r
+ /* Process CDC specific control requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetLineEncoding:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ { \r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Write the line coding data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetLineEncoding:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Read the line coding data in from the host into the global struct */\r
+ Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+\r
+ /* Finalize the stream transfer to clear the last packet from the host */\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetControlLineState:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* NOTE: Here you can read in the line state mask from the host, to get the current state of the output handshake\r
+ lines. The mask is read in from the wValue parameter in USB_ControlRequest, and can be masked against the\r
+ CONTROL_LINE_OUT_* masks to determine the RTS and DTR line states using the following code:\r
+ */\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the CDC_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage CDC data transmission and reception to and from the host. */\r
+TASK(CDC_Task)\r
+{\r
+ char* ReportString = NULL;\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ static bool ActionSent = false;\r
+ \r
+#if 0\r
+ /* NOTE: Here you can use the notification endpoint to send back line state changes to the host, for the special RS-232\r
+ handshake signal lines (and some error states), via the CONTROL_LINE_IN_* masks and the following code:\r
+ */\r
+ USB_Notification_Header_t Notification = (USB_Notification_Header_t)\r
+ {\r
+ .NotificationType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+ .Notification = NOTIF_SerialState,\r
+ .wValue = 0,\r
+ .wIndex = 0,\r
+ .wLength = sizeof(uint16_t),\r
+ };\r
+ \r
+ uint16_t LineStateMask;\r
+ \r
+ // Set LineStateMask here to a mask of CONTROL_LINE_IN_* masks to set the input handshake line states to send to the host\r
+ \r
+ Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
+ Endpoint_Write_Stream_LE(&Notification, sizeof(Notification));\r
+ Endpoint_Write_Stream_LE(&LineStateMask, sizeof(LineStateMask));\r
+ Endpoint_ClearIN();\r
+#endif\r
+\r
+ /* Determine if a joystick action has occurred */\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportString = JoystickUpString;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportString = JoystickDownString;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportString = JoystickLeftString;\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportString = JoystickRightString;\r
+ else if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportString = JoystickPressedString;\r
+\r
+ /* Flag management - Only allow one string to be sent per action */\r
+ if (ReportString == NULL)\r
+ {\r
+ ActionSent = false;\r
+ }\r
+ else if (ActionSent == false)\r
+ {\r
+ ActionSent = true;\r
+\r
+ /* Select the Serial Tx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
+\r
+ /* Write the String to the Endpoint */\r
+ Endpoint_Write_Stream_LE(ReportString, strlen(ReportString));\r
+ \r
+ /* Remember if the packet to send completely fills the endpoint */\r
+ bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* If the last packet filled the endpoint, send an empty packet to release the buffer on \r
+ * the receiver (otherwise all data will be cached until a non-full packet is received) */\r
+ if (IsFull)\r
+ {\r
+ /* Wait until the endpoint is ready for another packet */\r
+ while (!(Endpoint_IsINReady()));\r
+ \r
+ /* Send an empty packet to ensure that the host does not buffer data sent to it */\r
+ Endpoint_ClearIN();\r
+ }\r
+ }\r
+\r
+ /* Select the Serial Rx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
+ \r
+ /* Throw away any received data from the host */\r
+ if (Endpoint_IsOUTReceived())\r
+ Endpoint_ClearOUT();\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for CDC.c.\r
+ */\r
+\r
+#ifndef _CDC_H_\r
+#define _CDC_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+\r
+ /* Macros: */\r
+ /** CDC Class specific request to get the current virtual serial port configuration settings. */\r
+ #define REQ_GetLineEncoding 0x21\r
+\r
+ /** CDC Class specific request to set the current virtual serial port configuration settings. */\r
+ #define REQ_SetLineEncoding 0x20\r
+\r
+ /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
+ #define REQ_SetControlLineState 0x22\r
+ \r
+ /** Notification type constant for a change in the virtual serial port handshake line states, for\r
+ * use with a USB_Notification_Header_t notification structure when sent to the host via the CDC \r
+ * notification endpoint.\r
+ */\r
+ #define NOTIF_SerialState 0x20\r
+\r
+ /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request\r
+ * from the host, to indicate that the DTR line state should be high.\r
+ */\r
+ #define CONTROL_LINE_OUT_DTR (1 << 0)\r
+\r
+ /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request\r
+ * from the host, to indicate that theRTS line state should be high.\r
+ */\r
+ #define CONTROL_LINE_OUT_RTS (1 << 1)\r
+ \r
+ /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the DCD line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_DCD (1 << 0)\r
+\r
+ /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the DSR line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_DSR (1 << 1)\r
+\r
+ /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the BREAK line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_BREAK (1 << 2)\r
+\r
+ /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the RING line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_RING (1 << 3)\r
+\r
+ /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+ * to indicate that a framing error has occurred on the virtual serial port.\r
+ */\r
+ #define CONTROL_LINE_IN_FRAMEERROR (1 << 4)\r
+\r
+ /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+ * to indicate that a parity error has occurred on the virtual serial port.\r
+ */\r
+ #define CONTROL_LINE_IN_PARITYERROR (1 << 5)\r
+\r
+ /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+ * to indicate that a data overrun error has occurred on the virtual serial port.\r
+ */\r
+ #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
+ * as set by the host via a class specific request.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+ uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the\r
+ * CDCDevice_CDC_LineCodingFormats_t enum\r
+ */\r
+ uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+ * CDCDevice_LineCodingParity_t enum\r
+ */\r
+ uint8_t DataBits; /**< Bits of data per character of the virtual serial port */\r
+ } CDC_Line_Coding_t;\r
+ \r
+ /** Type define for a CDC notification, sent to the host via the CDC notification endpoint to indicate a\r
+ * change in the device state asynchronously.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t NotificationType; /**< Notification type, a mask of REQDIR_*, REQTYPE_* and REQREC_* constants\r
+ * from the library StdRequestType.h header\r
+ */\r
+ uint8_t Notification; /**< Notification value, a NOTIF_* constant */\r
+ uint16_t wValue; /**< Notification wValue, notification-specific */\r
+ uint16_t wIndex; /**< Notification wIndex, notification-specific */\r
+ uint16_t wLength; /**< Notification wLength, notification-specific */\r
+ } USB_Notification_Header_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible line encoding formats of a virtual serial port. */\r
+ enum CDCDevice_CDC_LineCodingFormats_t\r
+ {\r
+ OneStopBit = 0, /**< Each frame contains one stop bit */\r
+ OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
+ TwoStopBits = 2, /**< Each frame contains two stop bits */\r
+ };\r
+ \r
+ /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
+ enum CDCDevice_LineCodingParity_t\r
+ {\r
+ Parity_None = 0, /**< No parity bit mode on each frame */\r
+ Parity_Odd = 1, /**< Odd parity bit mode on each frame */\r
+ Parity_Even = 2, /**< Even parity bit mode on each frame */\r
+ Parity_Mark = 3, /**< Mark parity bit mode on each frame */\r
+ Parity_Space = 4, /**< Space parity bit mode on each frame */\r
+ };\r
+\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum CDC_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+ \r
+ /* Tasks: */\r
+ TASK(CDC_Task);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Communications Device Class Device (Virtual Serial Port)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Communications Device Class (CDC)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Abstract Control Model (ACM)</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF CDC Class Standard</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Communications Device Class demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a CDC device acting as a virtual serial port. Joystick\r
+ * actions are transmitted to the host as strings. The device\r
+ * does not respond to serial data sent from the host.\r
+ * \r
+ * After running this demo for the first time on a new computer,\r
+ * you will need to supply the .INF file located in this demo\r
+ * project's directory as the device's driver when running under\r
+ * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ * negating the need for custom drivers for the device. Other\r
+ * Operating Systems should automatically use their own inbuilt\r
+ * CDC-ACM drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x02,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2044,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x01}\r
+ },\r
+\r
+ .CDC_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address; \r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+ * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+ * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+ * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+ *\r
+ * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
+ */\r
+ #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
+ struct \\r
+ { \\r
+ USB_Descriptor_Header_t Header; \\r
+ uint8_t SubType; \\r
+ uint8_t Data[DataSize]; \\r
+ }\r
+ \r
+ /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPNUM 2\r
+\r
+ /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+ #define CDC_TX_EPNUM 3 \r
+\r
+ /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+ #define CDC_RX_EPNUM 4 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 16 \r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
+ USB_Descriptor_Endpoint_t ManagementEndpoint;\r
+ USB_Descriptor_Interface_t DCI_Interface;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+; Windows LUFA CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_2044\r
+\r
+;------------------------------------------------------------------------------\r
+; Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+; String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = CDC\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0xEF,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204E,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 4,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .IAD1 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+ .FirstInterfaceIndex = 0,\r
+ .TotalInterfaces = 2,\r
+\r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+\r
+ .IADStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC1_CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC1_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC1_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x01}\r
+ },\r
+\r
+ .CDC1_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC1_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .CDC1_ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .CDC1_DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC1_DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .CDC1_DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+\r
+ .IAD2 = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+ .FirstInterfaceIndex = 2,\r
+ .TotalInterfaces = 2,\r
+\r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+\r
+ .IADStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC2_CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 2,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC2_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC2_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x03}\r
+ },\r
+\r
+ .CDC2_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC2_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x02, 0x03}\r
+ },\r
+\r
+ .CDC2_ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .CDC2_DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 3,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC2_DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .CDC2_DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Dual CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address; \r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+ * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+ * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+ * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+ *\r
+ * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
+ */\r
+ #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
+ struct \\r
+ { \\r
+ USB_Descriptor_Header_t Header; \\r
+ uint8_t SubType; \\r
+ uint8_t Data[DataSize]; \\r
+ }\r
+\r
+ /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
+ #define CDC1_NOTIFICATION_EPNUM 3\r
+\r
+ /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
+ #define CDC1_TX_EPNUM 1 \r
+\r
+ /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
+ #define CDC1_RX_EPNUM 2 \r
+\r
+ /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
+ #define CDC2_NOTIFICATION_EPNUM 4\r
+\r
+ /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
+ #define CDC2_TX_EPNUM 5 \r
+\r
+ /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
+ #define CDC2_RX_EPNUM 6 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 16 \r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_Association_t IAD1;\r
+ USB_Descriptor_Interface_t CDC1_CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC1_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC1_Functional_Union;\r
+ USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint;\r
+ USB_Descriptor_Interface_t CDC1_DCI_Interface;\r
+ USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t CDC1_DataInEndpoint;\r
+ USB_Descriptor_Interface_Association_t IAD2;\r
+ USB_Descriptor_Interface_t CDC2_CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC2_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC2_Functional_Union;\r
+ USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint;\r
+ USB_Descriptor_Interface_t CDC2_DCI_Interface;\r
+ USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t CDC2_DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Dual CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>DualCDC</ProjectName><Created>30-Sep-2008 14:06:03</Created><LastEdit>30-Sep-2008 14:06:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:03</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\Demos\DualCDC\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>DualCDC.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualCDC.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>DualCDC.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the DualCDC demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+ \r
+#include "DualCDC.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = CDC1_Task , .TaskStatus = TASK_STOP },\r
+ { .Task = CDC2_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Globals: */\r
+/** Contains the current baud rate and other settings of the first virtual serial port. While this demo does not use\r
+ * the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
+ * upon request or the host will assume the device is non-functional.\r
+ *\r
+ * These values are set by the host via a class-specific request, however they are not required to be used accurately.\r
+ * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
+ * serial link characteristics and instead sends and receives data in endpoint streams.\r
+ */\r
+CDC_Line_Coding_t LineCoding1 = { .BaudRateBPS = 9600,\r
+ .CharFormat = OneStopBit,\r
+ .ParityType = Parity_None,\r
+ .DataBits = 8 };\r
+\r
+/** Contains the current baud rate and other settings of the second virtual serial port. While this demo does not use\r
+ * the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
+ * upon request or the host will assume the device is non-functional.\r
+ *\r
+ * These values are set by the host via a class-specific request, however they are not required to be used accurately.\r
+ * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
+ * serial link characteristics and instead sends and receives data in endpoint streams.\r
+ */\r
+CDC_Line_Coding_t LineCoding2 = { .BaudRateBPS = 9600,\r
+ .CharFormat = OneStopBit,\r
+ .ParityType = Parity_None,\r
+ .DataBits = 8 };\r
+ \r
+/** String to print through the first virtual serial port when the joystick is pressed upwards. */\r
+char JoystickUpString[] = "Joystick Up\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed downward. */\r
+char JoystickDownString[] = "Joystick Down\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed left. */\r
+char JoystickLeftString[] = "Joystick Left\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed right. */\r
+char JoystickRightString[] = "Joystick Right\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed inwards. */\r
+char JoystickPressedString[] = "Joystick Pressed\r\n";\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management and CDC management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running CDC and USB management tasks */\r
+ Scheduler_SetTaskMode(CDC1_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(CDC2_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the CDC management tasks are started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup CDC Notification, Rx and Tx Endpoints for the first CDC */\r
+ Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC1_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC1_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Setup CDC Notification, Rx and Tx Endpoints for the second CDC */\r
+ Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC2_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC2_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+ \r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+ \r
+ /* Start CDC tasks */\r
+ Scheduler_SetTaskMode(CDC1_Task, TASK_RUN);\r
+ Scheduler_SetTaskMode(CDC2_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the CDC control commands,\r
+ * which are all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Determine which interface's Line Coding data is being set from the wIndex parameter */\r
+ uint8_t* LineCodingData = (USB_ControlRequest.wIndex == 0) ? (uint8_t*)&LineCoding1 : (uint8_t*)&LineCoding2;\r
+\r
+ /* Process CDC specific control requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetLineEncoding:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ { \r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Write the line coding data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetLineEncoding:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Read the line coding data in from the host into the global struct */\r
+ Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+\r
+ /* Finalize the stream transfer to clear the last packet from the host */\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetControlLineState:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the DualCDC_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage CDC data transmission and reception to and from the host for the first CDC interface, which sends joystick\r
+ * movements to the host as ASCII strings.\r
+ */\r
+TASK(CDC1_Task)\r
+{\r
+ char* ReportString = NULL;\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ static bool ActionSent = false;\r
+\r
+ /* Determine if a joystick action has occurred */\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportString = JoystickUpString;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportString = JoystickDownString;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportString = JoystickLeftString;\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportString = JoystickRightString;\r
+ else if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportString = JoystickPressedString;\r
+\r
+ /* Flag management - Only allow one string to be sent per action */\r
+ if (ReportString == NULL)\r
+ {\r
+ ActionSent = false;\r
+ }\r
+ else if (ActionSent == false)\r
+ {\r
+ ActionSent = true;\r
+ \r
+ /* Select the Serial Tx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC1_TX_EPNUM);\r
+\r
+ /* Write the String to the Endpoint */\r
+ Endpoint_Write_Stream_LE(ReportString, strlen(ReportString));\r
+ \r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Wait until the endpoint is ready for another packet */\r
+ while (!(Endpoint_IsINReady()));\r
+ \r
+ /* Send an empty packet to ensure that the host does not buffer data sent to it */\r
+ Endpoint_ClearIN();\r
+ }\r
+\r
+ /* Select the Serial Rx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC1_RX_EPNUM);\r
+ \r
+ /* Throw away any received data from the host */\r
+ if (Endpoint_IsOUTReceived())\r
+ Endpoint_ClearOUT();\r
+}\r
+\r
+/** Function to manage CDC data transmission and reception to and from the host for the second CDC interface, which echoes back\r
+ * all data sent to it from the host.\r
+ */\r
+TASK(CDC2_Task)\r
+{\r
+ /* Select the Serial Rx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC2_RX_EPNUM);\r
+ \r
+ /* Check to see if any data has been received */\r
+ if (Endpoint_IsOUTReceived())\r
+ {\r
+ /* Create a temp buffer big enough to hold the incoming endpoint packet */\r
+ uint8_t Buffer[Endpoint_BytesInEndpoint()];\r
+ \r
+ /* Remember how large the incoming packet is */\r
+ uint16_t DataLength = Endpoint_BytesInEndpoint();\r
+ \r
+ /* Read in the incoming packet into the buffer */\r
+ Endpoint_Read_Stream_LE(&Buffer, DataLength);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Select the Serial Tx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC2_TX_EPNUM);\r
+ \r
+ /* Write the received data to the endpoint */\r
+ Endpoint_Write_Stream_LE(&Buffer, DataLength);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Wait until the endpoint is ready for the next packet */\r
+ while (!(Endpoint_IsINReady()));\r
+\r
+ /* Send an empty packet to prevent host buffering */\r
+ Endpoint_ClearIN();\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for DualCDC.c.\r
+ */\r
+\r
+#ifndef _DUAL_CDC_H_\r
+#define _DUAL_CDC_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+\r
+ /* Macros: */\r
+ /** CDC Class specific request to get the current virtual serial port configuration settings. */\r
+ #define REQ_GetLineEncoding 0x21\r
+\r
+ /** CDC Class specific request to set the current virtual serial port configuration settings. */\r
+ #define REQ_SetLineEncoding 0x20\r
+\r
+ /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
+ #define REQ_SetControlLineState 0x22\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
+ * as set by the host via a class specific request.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+ uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the\r
+ * CDCDevice_CDC_LineCodingFormats_t enum\r
+ */\r
+ uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+ * CDCDevice_LineCodingParity_t enum\r
+ */\r
+ uint8_t DataBits; /**< Bits of data per character of the virtual serial port */\r
+ } CDC_Line_Coding_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible line encoding formats of a virtual serial port. */\r
+ enum CDCDevice_CDC_LineCodingFormats_t\r
+ {\r
+ OneStopBit = 0, /**< Each frame contains one stop bit */\r
+ OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
+ TwoStopBits = 2, /**< Each frame contains two stop bits */\r
+ };\r
+ \r
+ /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
+ enum CDCDevice_LineCodingParity_t\r
+ {\r
+ Parity_None = 0, /**< No parity bit mode on each frame */\r
+ Parity_Odd = 1, /**< Odd parity bit mode on each frame */\r
+ Parity_Even = 2, /**< Even parity bit mode on each frame */\r
+ Parity_Mark = 3, /**< Mark parity bit mode on each frame */\r
+ Parity_Space = 4, /**< Space parity bit mode on each frame */\r
+ };\r
+\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum DualCDC_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+\r
+ /* Tasks: */\r
+ TASK(CDC1_Task);\r
+ TASK(CDC2_Task);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Miscellaneous Device Class</td>\r
+ * <td>( Sub-Interface: Communications Device Class (CDC) )</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Common Class</td> \r
+ * <td>( Sub-Interface: Abstract Control Model (ACM) )</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Interface Association Descriptor ECN</td>\r
+ * <td>USBIF CDC Class Standard</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Dual Communications Device Class demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a compound device with dual CDC functions acting as a pair\r
+ * of virtual serial ports. This demo uses Interface Association\r
+ * Descriptors to link together the pair of related CDC\r
+ * descriptors for each virtual serial port, which may not be\r
+ * supported in all OSes - Windows Vista is supported, as is\r
+ * XP (although the latter may need a hotfix to function).\r
+ * \r
+ * Joystick actions are transmitted to the host as strings\r
+ * through the first serial port. The device does not respond to\r
+ * serial data sent from the host in the first serial port.\r
+ * \r
+ * The second serial port echoes back data sent from the host.\r
+ * \r
+ * After running this demo for the first time on a new computer,\r
+ * you will need to supply the .INF file located in this demo\r
+ * project's directory as the device's driver when running under\r
+ * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ * negating the need for custom drivers for the device. Other\r
+ * Operating Systems should automatically use their own inbuilt\r
+ * CDC-ACM drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+; Windows LUFA Dual CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_00\r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_02\r
+\r
+;------------------------------------------------------------------------------\r
+; Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+; String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = DualCDC\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =\r
+{\r
+ 0x06, 0x9c, 0xff, /* Usage Page (Vendor Defined) */\r
+ 0x09, 0x01, /* Usage (Vendor Defined) */\r
+ 0xa1, 0x01, /* Collection (Vendor Defined) */\r
+ 0x09, 0x02, /* Usage (Vendor Defined) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0xff, /* Logical Maximum (255) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x09, 0x03, /* Usage (Vendor Defined) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0xff, /* Logical Maximum (255) */\r
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
+ 0xc0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204F,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .GenericHID = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(GenericReport)\r
+ },\r
+\r
+ .GenericINEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = GENERIC_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+\r
+ .GenericOUTEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | GENERIC_OUT_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = GENERIC_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Generic HID Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.GenericHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&GenericReport;\r
+ Size = sizeof(GenericReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+ * specification for details on the structure elements.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header;\r
+ \r
+ uint16_t HIDSpec;\r
+ uint8_t CountryCode;\r
+ \r
+ uint8_t TotalReportDescriptors;\r
+\r
+ uint8_t HIDReportType;\r
+ uint16_t HIDReportLength;\r
+ } USB_Descriptor_HID_t;\r
+\r
+ /** Type define for the data type used to store HID report descriptor elements. */\r
+ typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t GenericHID;\r
+ USB_Descriptor_Endpoint_t GenericINEndpoint;\r
+ USB_Descriptor_Endpoint_t GenericOUTEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Generic HID reporting IN endpoint. */\r
+ #define GENERIC_IN_EPNUM 1\r
+\r
+ /** Endpoint number of the Generic HID reporting OUT endpoint. */\r
+ #define GENERIC_OUT_EPNUM 2\r
+\r
+ /** Size in bytes of the Generic HID reporting endpoint. */\r
+ #define GENERIC_EPSIZE 8\r
+ \r
+ /** Size in bytes of the Generic HID reports (including report ID byte). */\r
+ #define GENERIC_REPORT_SIZE 8\r
+\r
+ /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+ #define DTYPE_HID 0x21\r
+ \r
+ /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+ #define DTYPE_Report 0x22\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Generic HID Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>GenericHID</ProjectName><Created>29-Mar-2009 23:19:24</Created><LastEdit>29-Mar-2009 23:19:40</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>29-Mar-2009 23:19:24</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\GenericHID\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>GenericHID.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>GenericHID.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>GenericHID.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-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20090313\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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the GenericHID demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "GenericHID.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_HID_Report , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Static buffer to hold the last received report from the host, so that it can be echoed back in the next sent report */\r
+static uint8_t LastReceived[GENERIC_REPORT_SIZE];\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+\r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+ \r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management task.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running HID reporting and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_HID_Report, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ * of the USB device after enumeration, and configures the generic HID device endpoints.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup Generic IN Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, GENERIC_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Setup Generic OUT Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_OUT, GENERIC_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ * all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Handle HID Class specific requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+\r
+ Endpoint_ClearSETUP();\r
+ \r
+ CreateGenericHIDReport(GenericData);\r
+\r
+ /* Write the report data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData));\r
+\r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Wait until the generic report has been sent by the host */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+\r
+ Endpoint_Read_Control_Stream_LE(&GenericData, sizeof(GenericData));\r
+\r
+ ProcessGenericHIDReport(GenericData);\r
+ \r
+ /* Clear the endpoint data */\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Wait until the host is ready to receive the request confirmation */\r
+ while (!(Endpoint_IsINReady()));\r
+ \r
+ /* Handshake the request by sending an empty IN packet */\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the GenericHID_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to process the lest received report from the host.\r
+ *\r
+ * \param DataArray Pointer to a buffer where the last report data is stored\r
+ */\r
+void ProcessGenericHIDReport(uint8_t* DataArray)\r
+{\r
+ /*\r
+ This is where you need to process the reports being sent from the host to the device.\r
+ DataArray is an array holding the last report from the host. This function is called\r
+ each time the host has sent a report to the device.\r
+ */\r
+ \r
+ for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)\r
+ LastReceived[i] = DataArray[i];\r
+}\r
+\r
+/** Function to create the next report to send back to the host at the next reporting interval.\r
+ *\r
+ * \param DataArray Pointer to a buffer where the next report data should be stored\r
+ */\r
+void CreateGenericHIDReport(uint8_t* DataArray)\r
+{\r
+ /*\r
+ This is where you need to create reports to be sent to the host from the device. This\r
+ function is called each time the host is ready to accept a new report. DataArray is \r
+ an array to hold the report to the host.\r
+ */\r
+\r
+ for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)\r
+ DataArray[i] = LastReceived[i];\r
+}\r
+\r
+TASK(USB_HID_Report)\r
+{\r
+ /* Check if the USB system is connected to a host */\r
+ if (USB_IsConnected)\r
+ {\r
+ Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);\r
+ \r
+ /* Check to see if a packet has been sent from the host */\r
+ if (Endpoint_IsOUTReceived())\r
+ {\r
+ /* Check to see if the packet contains data */\r
+ if (Endpoint_IsReadWriteAllowed())\r
+ {\r
+ /* Create a temporary buffer to hold the read in report from the host */\r
+ uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+ \r
+ /* Read Generic Report Data */\r
+ Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData));\r
+ \r
+ /* Process Generic Report Data */\r
+ ProcessGenericHIDReport(GenericData);\r
+ }\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearOUT();\r
+ } \r
+\r
+ Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);\r
+ \r
+ /* Check to see if the host is ready to accept another packet */\r
+ if (Endpoint_IsINReady())\r
+ {\r
+ /* Create a temporary buffer to hold the report to send to the host */\r
+ uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+ \r
+ /* Create Generic Report Data */\r
+ CreateGenericHIDReport(GenericData);\r
+\r
+ /* Write Generic Report Data */\r
+ Endpoint_Write_Stream_LE(&GenericData, sizeof(GenericData));\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for GenericHID.c.\r
+ */\r
+ \r
+#ifndef _GENERICHID_H_\r
+#define _GENERICHID_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <avr/interrupt.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+ \r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ \r
+ /* Macros: */\r
+ /** HID Class specific request to get the next HID report from the device. */\r
+ #define REQ_GetReport 0x01\r
+\r
+ /** HID Class specific request to send the next HID report to the device. */\r
+ #define REQ_SetReport 0x09\r
+\r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum GenericHID_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+\r
+ /* Task Definitions: */\r
+ TASK(USB_HID_Report);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+ void ProcessGenericHIDReport(uint8_t* DataArray);\r
+ void CreateGenericHIDReport(uint8_t* DataArray);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Generic HID Device\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Generic HID device demonstration application. This gives a simple reference application\r
+ * for implementing a generic HID device, using the basic USB HID drivers in all modern\r
+ * OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
+ * and from a USB Host, and by default transmits the last sent report back to the host.\r
+ * \r
+ * On start-up the system will automatically enumerate and function as a vendor HID device.\r
+ * When controlled by a custom HID class application, reports can be sent and received by\r
+ * both the standard data endpoint and control request methods defined in the HID specification.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ * \r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>GENERIC_REPORT_SIZE</td>\r
+ * <td>Descriptors.h</td>\r
+ * <td>This token defines the size of the device reports, both sent and received. The value must be an\r
+ * integer ranging from 1 to 255.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = GenericHID\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x04, /* Usage (Joystick) */\r
+ 0xa1, 0x01, /* Collection (Application) */\r
+ 0x09, 0x01, /* Usage (Pointer) */\r
+ 0xa1, 0x00, /* Collection (Physical) */\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x30, /* Usage (X) */\r
+ 0x09, 0x31, /* Usage (Y) */\r
+ 0x15, 0x9c, /* Logical Minimum (-100) */\r
+ 0x25, 0x64, /* Logical Maximum (100) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x81, 0x82, /* Input (Data, Variable, Absolute, Volatile) */\r
+ 0x05, 0x09, /* Usage Page (Button) */\r
+ 0x09, 0x02, /* Usage (Button 2) */\r
+ 0x09, 0x01, /* Usage (Button 1) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x75, 0x06, /* Report Size (6) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x81, 0x01, /* Input (Constant) */\r
+ 0xc0, /* End Collection */\r
+ 0xc0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2043,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .JoystickHID = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(JoystickReport)\r
+ },\r
+\r
+ .JoystickEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = JOYSTICK_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ } \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Joystick Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.JoystickHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&JoystickReport;\r
+ Size = sizeof(JoystickReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+ * specification for details on the structure elements.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header;\r
+ \r
+ uint16_t HIDSpec;\r
+ uint8_t CountryCode;\r
+ \r
+ uint8_t TotalReportDescriptors;\r
+\r
+ uint8_t HIDReportType;\r
+ uint16_t HIDReportLength;\r
+ } USB_Descriptor_HID_t;\r
+\r
+ /** Type define for the data type used to store HID report descriptor elements. */\r
+ typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t JoystickHID;\r
+ USB_Descriptor_Endpoint_t JoystickEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Joystick HID reporting IN endpoint. */\r
+ #define JOYSTICK_EPNUM 1\r
+\r
+ /** Size in bytes of the Joystick HID reporting IN endpoint. */\r
+ #define JOYSTICK_EPSIZE 8\r
+\r
+ /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+ #define DTYPE_HID 0x21\r
+ \r
+ /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+ #define DTYPE_Report 0x22\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Joystick Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>Joystick</ProjectName><Created>30-Sep-2008 14:06:38</Created><LastEdit>30-Sep-2008 14:07:27</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:38</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\Demos\Joystick\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Joystick.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Joystick.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Joystick.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Joystick demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Joystick.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_Joystick_Report , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management and joystick reporting tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running joystick reporting and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_Joystick_Report, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the joystick reporting task started.\r
+ */ \r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup Joystick Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(JOYSTICK_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, JOYSTICK_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+\r
+ /* Start joystick reporting task */\r
+ Scheduler_SetTaskMode(USB_Joystick_Report, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ * all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Handle HID Class specific requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ USB_JoystickReport_Data_t JoystickReportData;\r
+ \r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Create the next HID report to send to the host */ \r
+ GetNextReport(&JoystickReportData);\r
+ \r
+ /* Write the report data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(&JoystickReportData, sizeof(JoystickReportData));\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Fills the given HID report data structure with the next HID report to send to the host.\r
+ *\r
+ * \param ReportData Pointer to a HID report data structure to be filled\r
+ *\r
+ * \return Boolean true if the new report differs from the last report, false otherwise\r
+ */\r
+bool GetNextReport(USB_JoystickReport_Data_t* ReportData)\r
+{\r
+ static uint8_t PrevJoyStatus = 0;\r
+ static uint8_t PrevButtonStatus = 0;\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+ bool InputChanged = false;\r
+\r
+ /* Clear the report contents */\r
+ memset(ReportData, 0, sizeof(USB_JoystickReport_Data_t));\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportData->Y = -100;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportData->Y = 100;\r
+\r
+ if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportData->X = 100;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportData->X = -100;\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportData->Button = (1 << 1);\r
+ \r
+ if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+ ReportData->Button |= (1 << 0);\r
+ \r
+ /* Check if the new report is different to the previous report */\r
+ InputChanged = (uint8_t)(PrevJoyStatus ^ JoyStatus_LCL) | (uint8_t)(PrevButtonStatus ^ ButtonStatus_LCL);\r
+\r
+ /* Save the current joystick status for later comparison */\r
+ PrevJoyStatus = JoyStatus_LCL;\r
+ PrevButtonStatus = ButtonStatus_LCL;\r
+\r
+ /* Return whether the new report is different to the previous report or not */\r
+ return InputChanged;\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the Joystick_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage HID report generation and transmission to the host. */\r
+TASK(USB_Joystick_Report)\r
+{\r
+ /* Check if the USB System is connected to a Host */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Select the Joystick Report Endpoint */\r
+ Endpoint_SelectEndpoint(JOYSTICK_EPNUM);\r
+\r
+ /* Check to see if the host is ready for another packet */\r
+ if (Endpoint_IsINReady())\r
+ {\r
+ USB_JoystickReport_Data_t JoystickReportData;\r
+ \r
+ /* Create the next HID report to send to the host */\r
+ GetNextReport(&JoystickReportData);\r
+ \r
+ /* Write Joystick Report Data */\r
+ Endpoint_Write_Stream_LE(&JoystickReportData, sizeof(JoystickReportData));\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+ \r
+ /* Clear the report data afterwards */\r
+ memset(&JoystickReportData, 0, sizeof(JoystickReportData));\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Joystick.c.\r
+ */\r
+ \r
+#ifndef _JOYSTICK_H_\r
+#define _JOYSTICK_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ \r
+ /* Task Definitions: */\r
+ TASK(USB_Joystick_Report);\r
+\r
+ /* Macros: */\r
+ /** HID Class specific request to get the next HID report from the device. */\r
+ #define REQ_GetReport 0x01\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */\r
+ int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
+ uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
+ } USB_JoystickReport_Data_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum Joystick_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ bool GetNextReport(USB_JoystickReport_Data_t* ReportData);\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Joystick Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Joystick demonstration application. This gives a simple reference\r
+ * application for implementing a USB Keyboard device, for USB Joysticks\r
+ * using the standard Keyboard HID profile.\r
+ * \r
+ * This device will show up as a generic joystick device, with two buttons.\r
+ * Pressing the joystick inwards is the first button, and the HWB button\r
+ * is the second.\r
+ * \r
+ * Moving the joystick on the selected board moves the joystick location on\r
+ * the host computer.\r
+ * \r
+ * Currently only single interface joysticks are supported.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Joystick\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x06, /* Usage (Keyboard) */\r
+ 0xa1, 0x01, /* Collection (Application) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x95, 0x08, /* Report Count (8) */\r
+ 0x05, 0x07, /* Usage Page (Key Codes) */\r
+ 0x19, 0xe0, /* Usage Minimum (Keyboard LeftControl) */\r
+ 0x29, 0xe7, /* Usage Maximum (Keyboard Right GUI) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x81, 0x03, /* Input (Const, Variable, Absolute) */\r
+ 0x95, 0x05, /* Report Count (5) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x08, /* Usage Page (LEDs) */\r
+ 0x19, 0x01, /* Usage Minimum (Num Lock) */\r
+ 0x29, 0x05, /* Usage Maximum (Kana) */\r
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x03, /* Report Size (3) */\r
+ 0x91, 0x03, /* Output (Const, Variable, Absolute) */\r
+ 0x95, 0x06, /* Report Count (6) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x65, /* Logical Maximum (101) */\r
+ 0x05, 0x07, /* Usage Page (Keyboard) */\r
+ 0x19, 0x00, /* Usage Minimum (Reserved (no event indicated)) */\r
+ 0x29, 0x65, /* Usage Maximum (Keyboard Application) */\r
+ 0x81, 0x00, /* Input (Data, Array, Absolute) */\r
+ 0xc0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2042,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .KeyboardHID = \r
+ { \r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(KeyboardReport)\r
+ },\r
+ \r
+ .KeyboardEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = KEYBOARD_EPSIZE,\r
+ .PollingIntervalMS = 0x04\r
+ },\r
+\r
+ .KeyboardLEDsEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | KEYBOARD_LEDS_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = KEYBOARD_EPSIZE,\r
+ .PollingIntervalMS = 0x04\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Denver Gingerich"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&KeyboardReport;\r
+ Size = sizeof(KeyboardReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+ * specification for details on the structure elements.\r
+ */ \r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header;\r
+ \r
+ uint16_t HIDSpec;\r
+ uint8_t CountryCode;\r
+ \r
+ uint8_t TotalReportDescriptors;\r
+\r
+ uint8_t HIDReportType;\r
+ uint16_t HIDReportLength;\r
+ } USB_Descriptor_HID_t;\r
+ \r
+ /** Type define for the data type used to store HID report descriptor elements. */\r
+ typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t KeyboardHID;\r
+ USB_Descriptor_Endpoint_t KeyboardEndpoint;\r
+ USB_Descriptor_Endpoint_t KeyboardLEDsEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+ #define KEYBOARD_EPNUM 1\r
+\r
+ /** Endpoint number of the Keyboard HID reporting OUT endpoint. */\r
+ #define KEYBOARD_LEDS_EPNUM 2\r
+ \r
+ /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */ \r
+ #define KEYBOARD_EPSIZE 8\r
+\r
+ /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+ #define DTYPE_HID 0x21\r
+ \r
+ /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+ #define DTYPE_Report 0x22\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Keyboard Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>Keyboard</ProjectName><Created>30-Sep-2008 13:59:29</Created><LastEdit>30-Sep-2008 14:00:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 13:59:29</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Keyboard.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Keyboard\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Keyboard.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Keyboard.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Keyboard.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><File00000><FileId>00000</FileId><FileName>makefile</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Keyboard demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+ \r
+#include "Keyboard.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP }, \r
+ { .Task = USB_Keyboard_Report , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Global Variables */\r
+/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot\r
+ * protocol reporting mode.\r
+ */\r
+bool UsingReportProtocol = true;\r
+\r
+/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports\r
+ * for either the entire idle duration, or until the report status changes (e.g. the user presses a key).\r
+ */\r
+uint16_t IdleCount = 500;\r
+\r
+/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle\r
+ * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request \r
+ * the current idle period via a Get Idle HID class request, thus its value must be preserved.\r
+ */\r
+uint16_t IdleMSRemaining = 0;\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ \r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = 0x7D;\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+\r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+ \r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+\r
+ /* Default to report protocol on connect */\r
+ UsingReportProtocol = true;\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running keyboard reporting and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ * of the USB device after enumeration, and configures the keyboard device endpoints.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup Keyboard Keycode Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(KEYBOARD_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, KEYBOARD_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Setup Keyboard LED Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(KEYBOARD_LEDS_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_OUT, KEYBOARD_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+\r
+ /* Start running keyboard reporting task */\r
+ Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ * all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Handle HID Class specific requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ USB_KeyboardReport_Data_t KeyboardReportData;\r
+\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Create the next keyboard report for transmission to the host */\r
+ CreateKeyboardReport(&KeyboardReportData);\r
+\r
+ /* Write the report data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Wait until the LED report has been sent by the host */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+\r
+ /* Read in the LED report from the host */\r
+ uint8_t LEDStatus = Endpoint_Read_Byte();\r
+\r
+ /* Process the incoming LED report */\r
+ ProcessLEDReport(LEDStatus);\r
+ \r
+ /* Clear the endpoint data */\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_GetProtocol:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Write the current protocol flag to the host */\r
+ Endpoint_Write_Byte(UsingReportProtocol);\r
+ \r
+ /* Send the flag to the host */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetProtocol:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Set or clear the flag depending on what the host indicates that the current Protocol should be */\r
+ UsingReportProtocol = (USB_ControlRequest.wValue != 0);\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetIdle:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Get idle period in MSB */\r
+ IdleCount = (USB_ControlRequest.wValue >> 8);\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_GetIdle:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ { \r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Write the current idle duration to the host */\r
+ Endpoint_Write_Byte(IdleCount);\r
+ \r
+ /* Send the flag to the host */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+ Endpoint_ClearOUT();\r
+ }\r
+\r
+ break;\r
+ }\r
+}\r
+\r
+/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the\r
+ * scheduler elapsed idle period counter when the host has set an idle period.\r
+ */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ /* One millisecond has elapsed, decrement the idle time remaining counter if it has not already elapsed */\r
+ if (IdleMSRemaining)\r
+ IdleMSRemaining--;\r
+}\r
+\r
+/** Fills the given HID report data structure with the next HID report to send to the host.\r
+ *\r
+ * \param ReportData Pointer to a HID report data structure to be filled\r
+ */\r
+void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+\r
+ /* Clear the report contents */\r
+ memset(ReportData, 0, sizeof(USB_KeyboardReport_Data_t));\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportData->KeyCode[0] = 0x04; // A\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportData->KeyCode[0] = 0x05; // B\r
+\r
+ if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportData->KeyCode[0] = 0x06; // C\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportData->KeyCode[0] = 0x07; // D\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportData->KeyCode[0] = 0x08; // E\r
+}\r
+\r
+/** Processes a received LED report, and updates the board LEDs states to match.\r
+ *\r
+ * \param LEDReport LED status report from the host\r
+ */\r
+void ProcessLEDReport(uint8_t LEDReport)\r
+{\r
+ uint8_t LEDMask = LEDS_LED2;\r
+ \r
+ if (LEDReport & 0x01) // NUM Lock\r
+ LEDMask |= LEDS_LED1;\r
+ \r
+ if (LEDReport & 0x02) // CAPS Lock\r
+ LEDMask |= LEDS_LED3;\r
+\r
+ if (LEDReport & 0x04) // SCROLL Lock\r
+ LEDMask |= LEDS_LED4;\r
+\r
+ /* Set the status LEDs to the current Keyboard LED status */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Sends the next HID report to the host, via the keyboard data endpoint. */\r
+void SendNextReport(void)\r
+{\r
+ static USB_KeyboardReport_Data_t PrevKeyboardReportData;\r
+ USB_KeyboardReport_Data_t KeyboardReportData;\r
+ bool SendReport = true;\r
+ \r
+ /* Create the next keyboard report for transmission to the host */\r
+ CreateKeyboardReport(&KeyboardReportData);\r
+ \r
+ /* Check to see if the report data has changed - if so a report MUST be sent */\r
+ SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0);\r
+ \r
+ /* Save the current report data for later comparison to check for changes */\r
+ PrevKeyboardReportData = KeyboardReportData;\r
+ \r
+ /* Check if the idle period is set and has elapsed */\r
+ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining)))\r
+ {\r
+ /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
+ IdleMSRemaining = (IdleCount << 2);\r
+ \r
+ /* Idle period is set and has elapsed, must send a report to the host */\r
+ SendReport = true;\r
+ }\r
+ \r
+ /* Select the Keyboard Report Endpoint */\r
+ Endpoint_SelectEndpoint(KEYBOARD_EPNUM);\r
+\r
+ /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */\r
+ if (Endpoint_IsReadWriteAllowed() && SendReport)\r
+ {\r
+ /* Write Keyboard Report Data */\r
+ Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
+ \r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+ }\r
+}\r
+\r
+/** Reads the next LED status report from the host from the LED data endpoint, if one has been sent. */\r
+void ReceiveNextReport(void)\r
+{\r
+ /* Select the Keyboard LED Report Endpoint */\r
+ Endpoint_SelectEndpoint(KEYBOARD_LEDS_EPNUM);\r
+\r
+ /* Check if Keyboard LED Endpoint contains a packet */\r
+ if (Endpoint_IsOUTReceived())\r
+ {\r
+ /* Check to see if the packet contains data */\r
+ if (Endpoint_IsReadWriteAllowed())\r
+ {\r
+ /* Read in the LED report from the host */\r
+ uint8_t LEDReport = Endpoint_Read_Byte();\r
+\r
+ /* Process the read LED report from the host */\r
+ ProcessLEDReport(LEDReport);\r
+ }\r
+\r
+ /* Handshake the OUT Endpoint - clear endpoint and ready for next report */\r
+ Endpoint_ClearOUT();\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the Keyboard_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage HID report generation and transmission to the host, when in report mode. */\r
+TASK(USB_Keyboard_Report)\r
+{\r
+ /* Check if the USB system is connected to a host */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Send the next keypress report to the host */\r
+ SendNextReport();\r
+ \r
+ /* Process the LED report sent from the host */\r
+ ReceiveNextReport();\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Keyboard.c.\r
+ */\r
+\r
+#ifndef _KEYBOARD_H_\r
+#define _KEYBOARD_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/interrupt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+\r
+ /* Macros: */\r
+ /** Idle period indicating that reports should be sent only when the inputs have changed */\r
+ #define HID_IDLE_CHANGESONLY 0\r
+\r
+ /** HID Class specific request to get the next HID report from the device. */\r
+ #define REQ_GetReport 0x01\r
+\r
+ /** HID Class specific request to get the idle timeout period of the device. */\r
+ #define REQ_GetIdle 0x02\r
+\r
+ /** HID Class specific request to send the next HID report to the device. */\r
+ #define REQ_SetReport 0x09\r
+\r
+ /** HID Class specific request to set the idle timeout period of the device. */\r
+ #define REQ_SetIdle 0x0A\r
+\r
+ /** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
+ #define REQ_GetProtocol 0x03\r
+\r
+ /** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
+ #define REQ_SetProtocol 0x0B\r
+ \r
+ /* Task Definitions: */\r
+ TASK(USB_Keyboard_Report);\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+ uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+ uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+ } USB_KeyboardReport_Data_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum Keyboard_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+ \r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData);\r
+ void ProcessLEDReport(uint8_t LEDReport);\r
+ void SendNextReport(void);\r
+ void ReceiveNextReport(void);\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Keyboard Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description:\r
+ *\r
+ * Keyboard demonstration application. This gives a simple reference application\r
+ * for implementing a USB Keyboard using the basic USB HID drivers in all modern\r
+ * OSes (i.e. no special drivers required). It is boot protocol compatible, and thus\r
+ * works under compatible BIOS as if it was a native keyboard (e.g. PS/2).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a keyboard when the USB connection to a host is present. To use\r
+ * the keyboard example, manipulate the joystick to send the letters\r
+ * a, b, c, d and e. See the USB HID documentation for more information\r
+ * on sending keyboard event and key presses.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ * \r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Keyboard\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ *\r
+ * This descriptor describes the mouse HID interface's report structure.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x02, /* Usage (Mouse) */\r
+ 0xA1, 0x01, /* Collection (Application) */\r
+ 0x09, 0x01, /* Usage (Pointer) */\r
+ 0xA1, 0x00, /* Collection (Physical) */\r
+ 0x95, 0x03, /* Report Count (3) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x09, /* Usage Page (Button) */\r
+ 0x19, 0x01, /* Usage Minimum (Button 1) */\r
+ 0x29, 0x03, /* Usage Maximum (Button 3) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x05, /* Report Size (5) */\r
+ 0x81, 0x01, /* Input (Constant) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop Control) */\r
+ 0x09, 0x30, /* Usage X */\r
+ 0x09, 0x31, /* Usage Y */\r
+ 0x15, 0x81, /* Logical Minimum (-127) */\r
+ 0x25, 0x7F, /* Logical Maximum (127) */\r
+ 0x81, 0x06, /* Input (Data, Variable, Relative) */\r
+ 0xC0, /* End Collection */\r
+ 0xC0, /* End Collection */\r
+};\r
+\r
+/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x06, /* Usage (Keyboard) */\r
+ 0xa1, 0x01, /* Collection (Application) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x95, 0x08, /* Report Count (8) */\r
+ 0x05, 0x07, /* Usage Page (Key Codes) */\r
+ 0x19, 0xe0, /* Usage Minimum (Keyboard LeftControl) */\r
+ 0x29, 0xe7, /* Usage Maximum (Keyboard Right GUI) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x81, 0x03, /* Input (Const, Variable, Absolute) */\r
+ 0x95, 0x05, /* Report Count (5) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x08, /* Usage Page (LEDs) */\r
+ 0x19, 0x01, /* Usage Minimum (Num Lock) */\r
+ 0x29, 0x05, /* Usage Maximum (Kana) */\r
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x03, /* Report Size (3) */\r
+ 0x91, 0x03, /* Output (Const, Variable, Absolute) */\r
+ 0x95, 0x06, /* Report Count (6) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x65, /* Logical Maximum (101) */\r
+ 0x05, 0x07, /* Usage Page (Keyboard) */\r
+ 0x19, 0x00, /* Usage Minimum (Reserved (no event indicated)) */\r
+ 0x29, 0x65, /* Usage Maximum (Keyboard Application) */\r
+ 0x81, 0x00, /* Input (Data, Array, Absolute) */\r
+ 0xC0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204D,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .KeyboardInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .KeyboardHID = \r
+ { \r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(KeyboardReport)\r
+ },\r
+ \r
+ .KeyboardInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = HID_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+\r
+ .KeyboardOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | KEYBOARD_OUT_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = HID_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+\r
+ .MouseInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x01,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x02,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MouseHID = \r
+ { \r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(MouseReport)\r
+ },\r
+ \r
+ .MouseInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_IN_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = HID_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Mouse and Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ if (!(wIndex))\r
+ {\r
+ Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ }\r
+ else\r
+ {\r
+ Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+ Size = sizeof(USB_Descriptor_HID_t); \r
+ }\r
+ break;\r
+ case DTYPE_Report: \r
+ if (!(wIndex))\r
+ {\r
+ Address = (void*)&KeyboardReport;\r
+ Size = sizeof(KeyboardReport);\r
+ }\r
+ else\r
+ { \r
+ Address = (void*)&MouseReport;\r
+ Size = sizeof(MouseReport);\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+ * specification for details on the structure elements.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header;\r
+ \r
+ uint16_t HIDSpec;\r
+ uint8_t CountryCode;\r
+ \r
+ uint8_t TotalReportDescriptors;\r
+\r
+ uint8_t HIDReportType;\r
+ uint16_t HIDReportLength;\r
+ } USB_Descriptor_HID_t;\r
+\r
+ /** Type define for the data type used to store HID report descriptor elements. */\r
+ typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t KeyboardInterface;\r
+ USB_Descriptor_HID_t KeyboardHID;\r
+ USB_Descriptor_Endpoint_t KeyboardInEndpoint;\r
+ USB_Descriptor_Endpoint_t KeyboardOutEndpoint;\r
+ USB_Descriptor_Interface_t MouseInterface;\r
+ USB_Descriptor_HID_t MouseHID;\r
+ USB_Descriptor_Endpoint_t MouseInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+ #define KEYBOARD_IN_EPNUM 1\r
+\r
+ /** Endpoint number of the Keyboard HID reporting OUT endpoint. */\r
+ #define KEYBOARD_OUT_EPNUM 2\r
+\r
+ /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+ #define MOUSE_IN_EPNUM 3\r
+\r
+ /** Size in bytes of each of the HID reporting IN and OUT endpoints. */\r
+ #define HID_EPSIZE 8\r
+\r
+ /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+ #define DTYPE_HID 0x21\r
+ \r
+ /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+ #define DTYPE_Report 0x22\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Combined Keyboard/Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>KeyboardMouse</ProjectName><Created>30-Sep-2008 14:11:00</Created><LastEdit>30-Sep-2008 14:11:17</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:11:00</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\Demos\KeyboardMouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>KeyboardMouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>KeyboardMouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>KeyboardMouse.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the KeyboardMouse demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+ \r
+#include "KeyboardMouse.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_Mouse , .TaskStatus = TASK_RUN },\r
+ { .Task = USB_Keyboard , .TaskStatus = TASK_RUN },\r
+};\r
+\r
+/* Global Variables */\r
+/** Global structure to hold the current keyboard interface HID report, for transmission to the host */\r
+USB_KeyboardReport_Data_t KeyboardReportData;\r
+\r
+/** Global structure to hold the current mouse interface HID report, for transmission to the host */\r
+USB_MouseReport_Data_t MouseReportData;\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+ \r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management task.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running HID reporting and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ * of the USB device after enumeration, and configures the keyboard and mouse device endpoints.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup Keyboard Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, HID_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Setup Keyboard LED Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_OUT, HID_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Setup Mouse Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(MOUSE_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, HID_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ * all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ uint8_t* ReportData;\r
+ uint8_t ReportSize;\r
+\r
+ /* Handle HID Class specific requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Determine if it is the mouse or the keyboard data that is being requested */\r
+ if (!(USB_ControlRequest.wIndex))\r
+ {\r
+ ReportData = (uint8_t*)&KeyboardReportData;\r
+ ReportSize = sizeof(KeyboardReportData);\r
+ }\r
+ else\r
+ {\r
+ ReportData = (uint8_t*)&MouseReportData;\r
+ ReportSize = sizeof(MouseReportData);\r
+ }\r
+\r
+ /* Write the report data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(ReportData, ReportSize);\r
+\r
+ /* Clear the report data afterwards */\r
+ memset(ReportData, 0, ReportSize);\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Wait until the LED report has been sent by the host */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+\r
+ /* Read in the LED report from the host */\r
+ uint8_t LEDStatus = Endpoint_Read_Byte();\r
+ uint8_t LEDMask = LEDS_LED2;\r
+ \r
+ if (LEDStatus & 0x01) // NUM Lock\r
+ LEDMask |= LEDS_LED1;\r
+ \r
+ if (LEDStatus & 0x02) // CAPS Lock\r
+ LEDMask |= LEDS_LED3;\r
+\r
+ if (LEDStatus & 0x04) // SCROLL Lock\r
+ LEDMask |= LEDS_LED4;\r
+\r
+ /* Set the status LEDs to the current HID LED status */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+\r
+ /* Clear the endpoint data */\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the KeyboardMouse_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the\r
+ * keyboard IN endpoint when the host is ready for more data. Additionally, it processes host LED status\r
+ * reports sent to the device via the keyboard OUT reporting endpoint.\r
+ */\r
+TASK(USB_Keyboard)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+\r
+ /* Check if board button is not pressed, if so mouse mode enabled */\r
+ if (!(Buttons_GetStatus() & BUTTONS_BUTTON1))\r
+ {\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ KeyboardReportData.KeyCode[0] = 0x04; // A\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ KeyboardReportData.KeyCode[0] = 0x05; // B\r
+\r
+ if (JoyStatus_LCL & JOY_LEFT)\r
+ KeyboardReportData.KeyCode[0] = 0x06; // C\r
+ else if (JoyStatus_LCL & JOY_RIGHT)\r
+ KeyboardReportData.KeyCode[0] = 0x07; // D\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ KeyboardReportData.KeyCode[0] = 0x08; // E\r
+ }\r
+ \r
+ /* Check if the USB system is connected to a host and report protocol mode is enabled */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Select the Keyboard Report Endpoint */\r
+ Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);\r
+\r
+ /* Check if Keyboard Endpoint Ready for Read/Write */\r
+ if (Endpoint_IsReadWriteAllowed())\r
+ {\r
+ /* Write Keyboard Report Data */\r
+ Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Clear the report data afterwards */\r
+ memset(&KeyboardReportData, 0, sizeof(KeyboardReportData));\r
+ }\r
+\r
+ /* Select the Keyboard LED Report Endpoint */\r
+ Endpoint_SelectEndpoint(KEYBOARD_OUT_EPNUM);\r
+\r
+ /* Check if Keyboard LED Endpoint Ready for Read/Write */\r
+ if (Endpoint_IsReadWriteAllowed())\r
+ { \r
+ /* Read in the LED report from the host */\r
+ uint8_t LEDStatus = Endpoint_Read_Byte();\r
+ uint8_t LEDMask = LEDS_LED2;\r
+ \r
+ if (LEDStatus & 0x01) // NUM Lock\r
+ LEDMask |= LEDS_LED1;\r
+ \r
+ if (LEDStatus & 0x02) // CAPS Lock\r
+ LEDMask |= LEDS_LED3;\r
+\r
+ if (LEDStatus & 0x04) // SCROLL Lock\r
+ LEDMask |= LEDS_LED4;\r
+\r
+ /* Set the status LEDs to the current Keyboard LED status */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+\r
+ /* Handshake the OUT Endpoint - clear endpoint and ready for next report */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ }\r
+}\r
+\r
+/** Mouse task. This generates the next mouse HID report for the host, and transmits it via the\r
+ * mouse IN endpoint when the host is ready for more data.\r
+ */\r
+TASK(USB_Mouse)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+\r
+ /* Check if board button is pressed, if so mouse mode enabled */\r
+ if (Buttons_GetStatus() & BUTTONS_BUTTON1)\r
+ {\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ MouseReportData.Y = 1;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ MouseReportData.Y = -1;\r
+\r
+ if (JoyStatus_LCL & JOY_RIGHT)\r
+ MouseReportData.X = 1;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ MouseReportData.X = -1;\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ MouseReportData.Button = (1 << 0);\r
+ }\r
+\r
+ /* Check if the USB system is connected to a host and report protocol mode is enabled */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Select the Mouse Report Endpoint */\r
+ Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);\r
+\r
+ /* Check if Mouse Endpoint Ready for Read/Write */\r
+ if (Endpoint_IsReadWriteAllowed())\r
+ {\r
+ /* Write Mouse Report Data */\r
+ Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData));\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Clear the report data afterwards */\r
+ memset(&MouseReportData, 0, sizeof(MouseReportData));\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)\r
+ \r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+#ifndef _KEYBOARD_MOUSE_H_\r
+#define _KEYBOARD_MOUSE_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ \r
+ /* Task Definitions: */\r
+ TASK(USB_Keyboard);\r
+ TASK(USB_Mouse);\r
+\r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum KeyboardMouse_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+ \r
+ /* Macros: */\r
+ /** HID Class specific request to get the next HID report from the device. */\r
+ #define REQ_GetReport 0x01\r
+\r
+ /** HID Class specific request to send the next HID report to the device. */\r
+ #define REQ_SetReport 0x09\r
+\r
+ /** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
+ #define REQ_GetProtocol 0x03\r
+\r
+ /** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
+ #define REQ_SetProtocol 0x0B\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+ uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+ uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+ } USB_KeyboardReport_Data_t;\r
+\r
+ /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+ int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+ int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+ } USB_MouseReport_Data_t;\r
+ \r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Dual HID Keyboard and Mouse Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Keyboard/Mouse demonstration application. This gives a simple reference\r
+ * application for implementing a composite device containing both USB Keyboard\r
+ * and USB Mouse functionality using the basic USB HID drivers in all modern OSes\r
+ * (i.e. no special drivers required). This example uses two separate HID\r
+ * interfaces for each function. It is boot protocol compatible, and thus works under\r
+ * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a keyboard when the USB connection to a host is present and the HWB is not\r
+ * pressed. When enabled, manipulate the joystick to send the letters\r
+ * a, b, c, d and e. See the USB HID documentation for more information\r
+ * on sending keyboard event and key presses.\r
+ * \r
+ * When the HWB is pressed, the mouse mode is enabled. When enabled, move the\r
+ * joystick to move the pointer, and push the joystick inwards to simulate a\r
+ * left-button click.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = KeyboardMouse\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2048,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+\r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .AudioControlInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 0,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR \r
+ },\r
+ \r
+ .AudioControlInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_Header,\r
+ \r
+ .ACSpecification = VERSION_BCD(01.00),\r
+ .TotalLength = sizeof(USB_AudioInterface_AC_t),\r
+ \r
+ .InCollection = 1,\r
+ .InterfaceNumbers = {1}, \r
+ },\r
+\r
+ .AudioStreamInterface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x01,\r
+ .SubClass = 0x03,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .AudioStreamInterface_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioInterface_MIDI_AS_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_General,\r
+\r
+ .AudioSpecification = VERSION_BCD(01.00),\r
+ \r
+ .TotalLength = (sizeof(USB_Descriptor_Configuration_t) - offsetof(USB_Descriptor_Configuration_t, AudioStreamInterface_SPC))\r
+ },\r
+\r
+ .MIDI_In_Jack_Emb = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputJack,\r
+ \r
+ .JackType = JACKTYPE_EMBEDDED,\r
+ .JackID = 0x01,\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MIDI_In_Jack_Ext = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_InputJack,\r
+ \r
+ .JackType = JACKTYPE_EXTERNAL,\r
+ .JackID = 0x02,\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+ \r
+ .MIDI_Out_Jack_Emb = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputJack,\r
+ \r
+ .JackType = JACKTYPE_EMBEDDED,\r
+ .JackID = 0x03,\r
+\r
+ .NumberOfPins = 1,\r
+ .SourceJackID = {0x02},\r
+ .SourcePinID = {0x01},\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MIDI_Out_Jack_Ext = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+ .Subtype = DSUBTYPE_OutputJack,\r
+ \r
+ .JackType = JACKTYPE_EXTERNAL,\r
+ .JackID = 0x04,\r
+\r
+ .NumberOfPins = 1,\r
+ .SourceJackID = {0x01},\r
+ .SourcePinID = {0x01},\r
+ \r
+ .JackStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MIDI_In_Jack_Endpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),\r
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = MIDI_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 0\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .MIDI_In_Jack_Endpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+\r
+ .TotalEmbeddedJacks = 0x01,\r
+ .AssociatedJackID = {0x01}\r
+ },\r
+\r
+ .MIDI_Out_Jack_Endpoint = \r
+ {\r
+ .Endpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),\r
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+ .EndpointSize = MIDI_STREAM_EPSIZE,\r
+ .PollingIntervalMS = 0\r
+ },\r
+ \r
+ .Refresh = 0,\r
+ .SyncEndpointNumber = 0\r
+ },\r
+ \r
+ .MIDI_Out_Jack_Endpoint_SPC = \r
+ {\r
+ .Header = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+ .Subtype = DSUBTYPE_General,\r
+\r
+ .TotalEmbeddedJacks = 0x01,\r
+ .AssociatedJackID = {0x03}\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA MIDI Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
+ #define DTYPE_AudioInterface 0x24\r
+\r
+ /** Descriptor header constant to indicate a Audio class endpoint descriptor. */\r
+ #define DTYPE_AudioEndpoint 0x25\r
+\r
+ /** Audio class descriptor subtype value for a Audio class specific header descriptor. */\r
+ #define DSUBTYPE_Header 0x01\r
+\r
+ /** Audio class descriptor subtype value for a Audio class specific MIDI input jack descriptor. */\r
+ #define DSUBTYPE_InputJack 0x02\r
+\r
+ /** Audio class descriptor subtype value for a Audio class specific MIDI output jack descriptor. */\r
+ #define DSUBTYPE_OutputJack 0x03\r
+\r
+ /** Audio class descriptor subtype value for a general Audio class specific descriptor. */\r
+ #define DSUBTYPE_General 0x01\r
+\r
+ /** Audio class descriptor jack type value for an embedded (logical) MIDI input or output jack. */\r
+ #define JACKTYPE_EMBEDDED 0x01\r
+\r
+ /** Audio class descriptor jack type value for an external (physical) MIDI input or output jack. */\r
+ #define JACKTYPE_EXTERNAL 0x02\r
+ \r
+ /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */\r
+ #define MIDI_STREAM_OUT_EPNUM 1\r
+\r
+ /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */\r
+ #define MIDI_STREAM_IN_EPNUM 2\r
+\r
+ /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */\r
+ #define MIDI_STREAM_EPSIZE 64\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to\r
+ * supply extra information about the audio device's layout to the host. See the USB Audio specification for more\r
+ * details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint16_t ACSpecification; /** Binary coded decimal value, indicating the supported Audio Class specification version */\r
+ uint16_t TotalLength; /** Total length of the Audio class specific control descriptors, including this descriptor */\r
+ \r
+ uint8_t InCollection; /** Total number of audio class interfaces within this device */\r
+ uint8_t InterfaceNumbers[1]; /** Interface numbers of each audio interface */\r
+ } USB_AudioInterface_AC_t;\r
+ \r
+ /** Type define for an Audio class specific MIDI streaming interface descriptor. This indicates to the host\r
+ * how MIDI the specification compliance of the device and the total length of the Audio class specific descriptors.\r
+ * See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+ \r
+ uint16_t AudioSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */\r
+ uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */\r
+ } USB_AudioInterface_MIDI_AS_t;\r
+ \r
+ /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
+ * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
+\r
+ uint8_t Refresh; /**< Always set to zero */\r
+ uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
+ } USB_AudioStreamEndpoint_Std_t;\r
+\r
+ /** Type define for an Audio class specific MIDI IN jack. This gives information to the host on a MIDI input, either\r
+ * a physical input jack, or a logical jack (receiving input data internally, or from the host via an endpoint).\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint8_t JackType; /**< Type of jack, one of the JACKTYPE_* mask values */\r
+ uint8_t JackID; /**< ID value of this jack - must be a unique value within the device */\r
+ \r
+ uint8_t JackStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_MIDI_In_Jack_t;\r
+\r
+ /** Type define for an Audio class specific MIDI OUT jack. This gives information to the host on a MIDI output, either\r
+ * a physical output jack, or a logical jack (sending output data internally, or to the host via an endpoint).\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint8_t JackType; /**< Type of jack, one of the JACKTYPE_* mask values */\r
+ uint8_t JackID; /**< ID value of this jack - must be a unique value within the device */\r
+ \r
+ uint8_t NumberOfPins; /**< Number of output channels within the jack, either physical or logical */\r
+ uint8_t SourceJackID[1]; /**< ID of each output pin's source data jack */\r
+ uint8_t SourcePinID[1]; /**< Pin number in the input jack of each output pin's source data */\r
+ \r
+ uint8_t JackStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+ } USB_MIDI_Out_Jack_t;\r
+ \r
+ /** Type define for an Audio class specific extended MIDI jack endpoint descriptor. This contains extra information\r
+ * on the usage of MIDI endpoints used to stream MIDI events in and out of the USB Audio device, and follows an Audio\r
+ * class specific extended MIDI endpoint descriptor. See the USB Audio specification for more details.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+ uint8_t TotalEmbeddedJacks; /**< Total number of jacks inside this endpoint */\r
+ uint8_t AssociatedJackID[1]; /**< IDs of each jack inside the endpoint */\r
+ } USB_MIDI_Jack_Endpoint_t;\r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t AudioControlInterface;\r
+ USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
+ USB_Descriptor_Interface_t AudioStreamInterface;\r
+ USB_AudioInterface_MIDI_AS_t AudioStreamInterface_SPC;\r
+ USB_MIDI_In_Jack_t MIDI_In_Jack_Emb;\r
+ USB_MIDI_In_Jack_t MIDI_In_Jack_Ext;\r
+ USB_MIDI_Out_Jack_t MIDI_Out_Jack_Emb;\r
+ USB_MIDI_Out_Jack_t MIDI_Out_Jack_Ext;\r
+ USB_AudioStreamEndpoint_Std_t MIDI_In_Jack_Endpoint;\r
+ USB_MIDI_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC;\r
+ USB_AudioStreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;\r
+ USB_MIDI_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - MIDI Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>MIDI</ProjectName><Created>30-Sep-2008 14:13:12</Created><LastEdit>30-Sep-2008 14:13:33</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:12</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\Demos\MIDI\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>MIDI.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MIDI.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>MIDI.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the MIDI input demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "MIDI.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_MIDI_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+ \r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs, disables the sample update and PWM output timers and stops the USB and MIDI management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running audio and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_MIDI_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the MIDI management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup MIDI stream endpoints */\r
+ Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, MIDI_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, MIDI_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+\r
+ /* Start MIDI task */\r
+ Scheduler_SetTaskMode(USB_MIDI_Task, TASK_RUN);\r
+}\r
+\r
+/** Task to handle the generation of MIDI note change events in response to presses of the board joystick, and send them\r
+ * to the host.\r
+ */\r
+TASK(USB_MIDI_Task)\r
+{\r
+ static uint8_t PrevJoystickStatus;\r
+\r
+ /* Select the MIDI IN stream */\r
+ Endpoint_SelectEndpoint(MIDI_STREAM_IN_EPNUM);\r
+\r
+ /* Check if endpoint is ready to be written to */\r
+ if (Endpoint_IsINReady())\r
+ {\r
+ /* Get current joystick mask, XOR with previous to detect joystick changes */\r
+ uint8_t JoystickStatus = Joystick_GetStatus();\r
+ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);\r
+ \r
+ /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */\r
+ uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));\r
+\r
+ if (JoystickChanges & JOY_LEFT)\r
+ SendMIDINoteChange(0x3C, (JoystickStatus & JOY_LEFT), 0, Channel);\r
+\r
+ if (JoystickChanges & JOY_UP)\r
+ SendMIDINoteChange(0x3D, (JoystickStatus & JOY_UP), 0, Channel);\r
+\r
+ if (JoystickChanges & JOY_RIGHT)\r
+ SendMIDINoteChange(0x3E, (JoystickStatus & JOY_RIGHT), 0, Channel);\r
+\r
+ if (JoystickChanges & JOY_DOWN)\r
+ SendMIDINoteChange(0x3F, (JoystickStatus & JOY_DOWN), 0, Channel);\r
+\r
+ if (JoystickChanges & JOY_PRESS)\r
+ SendMIDINoteChange(0x3B, (JoystickStatus & JOY_PRESS), 0, Channel);\r
+\r
+ /* Save previous joystick value for next joystick change detection */\r
+ PrevJoystickStatus = JoystickStatus;\r
+ }\r
+\r
+ /* Select the MIDI OUT stream */\r
+ Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPNUM);\r
+\r
+ /* Check if endpoint is ready to be read from, if so discard its (unused) data */\r
+ if (Endpoint_IsOUTReceived())\r
+ Endpoint_ClearOUT();\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the MIDI_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Sends a MIDI note change event (note on or off) to the MIDI output jack, on the given virtual cable ID and channel.\r
+ *\r
+ * \param Pitch Pitch of the note to turn on or off\r
+ * \param OnOff Set to true if the note is on (being held down), or false otherwise\r
+ * \param CableID ID of the virtual cable to send the note change to\r
+ * \param Channel MIDI channel number to send the note change event to\r
+ */\r
+void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff, const uint8_t CableID, const uint8_t Channel)\r
+{\r
+ /* Wait until endpoint ready for more data */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+ /* Check if the message should be a Note On or Note Off command */\r
+ uint8_t Command = ((OnOff)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+\r
+ /* Write the Packet Header to the endpoint */\r
+ Endpoint_Write_Byte((CableID << 4) | (Command >> 4));\r
+\r
+ /* Write the Note On/Off command with the specified channel, pitch and velocity */\r
+ Endpoint_Write_Byte(Command | Channel);\r
+ Endpoint_Write_Byte(Pitch);\r
+ Endpoint_Write_Byte(MIDI_STANDARD_VELOCITY);\r
+ \r
+ /* Send the data in the endpoint to the host */\r
+ Endpoint_ClearIN();\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for AudioOutput.c.\r
+ */\r
+ \r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+\r
+ #include "Descriptors.h"\r
+ \r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+\r
+ /* Macros: */\r
+ /** MIDI command for a note on (activation) event */\r
+ #define MIDI_COMMAND_NOTE_ON 0x90\r
+\r
+ /** MIDI command for a note off (deactivation) event */\r
+ #define MIDI_COMMAND_NOTE_OFF 0x80\r
+\r
+ /** Standard key press velocity value used for all note events, as no pressure sensor is mounted */\r
+ #define MIDI_STANDARD_VELOCITY 64\r
+ \r
+ /** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel\r
+ * addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.\r
+ *\r
+ * \param channel MIDI channel number to address\r
+ */\r
+ #define MIDI_CHANNEL(channel) (channel - 1)\r
+\r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum MIDI_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+\r
+ /* Task Definitions: */\r
+ TASK(USB_MIDI_Task);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+\r
+ void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff,\r
+ const uint8_t CableID, const uint8_t Channel); \r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage MIDI Input Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Audio Class</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Standard Audio Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Audio Class Specification</td>\r
+ * <td>USB-MIDI Audio Class Extension Specification</td>\r
+ * <td>General MIDI Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * MIDI demonstration application. This gives a simple reference\r
+ * application for implementing the USB-MIDI class in USB devices.\r
+ * It is built upon the USB Audio class.\r
+ * \r
+ * Joystick movements are translated into note on/off messages and\r
+ * are sent to the host PC as MIDI streams which can be read by any\r
+ * MIDI program supporting MIDI IN devices.\r
+ * \r
+ * If the HWB is not pressed, channel 1 (default piano) is used. If\r
+ * the HWB is set, then channel 10 (default percussion) is selected.\r
+ * \r
+ * This device implements MIDI-THRU mode, with the IN MIDI data being\r
+ * generated by the device itself. OUT MIDI data is discarded.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MIDI\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2045,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = 0x03,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x08,\r
+ .SubClass = 0x06,\r
+ .Protocol = 0x50,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MASS_STORAGE_IN_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = MASS_STORAGE_IO_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MASS_STORAGE_OUT_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = MASS_STORAGE_IO_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Mass Storage Demo"\r
+};\r
+\r
+/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12\r
+ * digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By\r
+ * using the unique serial number string to identify a device, the device drivers do not need to be reinstalled\r
+ * each time the device is inserted into a different USB port on the same system. <b>This should be unique between\r
+ * devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system\r
+ * at the same time.</b>\r
+ */\r
+USB_Descriptor_String_t PROGMEM SerialNumberString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"000000000000"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ case 0x03: \r
+ Address = (void*)&SerialNumberString;\r
+ Size = pgm_read_byte(&SerialNumberString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Endpoint number of the Mass Storage device-to-host data IN endpoint. */\r
+ #define MASS_STORAGE_IN_EPNUM 3 \r
+\r
+ /** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */\r
+ #define MASS_STORAGE_OUT_EPNUM 4 \r
+\r
+ /** Size in bytes of the Mass Storage data endpoints. */\r
+ #define MASS_STORAGE_IO_EPSIZE 64\r
+ \r
+ /* Type Defines: */ \r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Mass Storage Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Functions to manage the physical dataflash media, including reading and writing of\r
+ * blocks of data. These functions are called by the SCSI layer when data must be stored\r
+ * or retrieved to/from the physical storage media. If a different media is used (such\r
+ * as a SD card or EEPROM), functions similar to these will need to be generated.\r
+ */\r
+\r
+#define INCLUDE_FROM_DATAFLASHMANAGER_C\r
+#include "DataflashManager.h"\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes\r
+ * them to the dataflash in Dataflash page sized blocks.\r
+ *\r
+ * \param BlockAddress Data block starting address for the write sequence\r
+ * \param TotalBlocks Number of blocks of data to write\r
+ */\r
+void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+ /* Wait until endpoint is ready before continuing */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if the endpoint is currently empty */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ {\r
+ /* Clear the current endpoint bank */\r
+ Endpoint_ClearOUT();\r
+ \r
+ /* Wait until the host has sent another packet */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ }\r
+\r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+ /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+ }\r
+#endif\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, 0);\r
+ }\r
+\r
+ /* Write one 16-byte chunk of data to the dataflash */\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ Dataflash_SendByte(Endpoint_Read_Byte());\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+\r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return; \r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter and reset the sub block counter */\r
+ TotalBlocks--;\r
+ }\r
+\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* If the endpoint is empty, clear it ready for the next packet from the host */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ * and writes them in OS sized blocks to the endpoint.\r
+ *\r
+ * \param BlockAddress Data block starting address for the read sequence\r
+ * \param TotalBlocks Number of blocks of data to read\r
+ */\r
+void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ \r
+ /* Wait until endpoint is ready before continuing */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ \r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if the endpoint is currently full */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ {\r
+ /* Clear the endpoint bank to send its contents to the host */\r
+ Endpoint_ClearIN();\r
+ \r
+ /* Wait until the endpoint is ready for more data */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ }\r
+ \r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ \r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ } \r
+\r
+ /* Read one 16-byte chunk of data from the dataflash */\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+ \r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return;\r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter */\r
+ TotalBlocks--;\r
+ }\r
+ \r
+ /* If the endpoint is full, send its contents to the host */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ Endpoint_ClearIN();\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ * the a given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the\r
+ * dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the\r
+ * dataflash.\r
+ *\r
+ * \param BlockAddress Data block starting address for the write sequence\r
+ * \param TotalBlocks Number of blocks of data to write\r
+ * \param BufferPtr Pointer to the data source RAM buffer\r
+ */\r
+void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+ /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_WaitWhileBusy();\r
+ }\r
+#endif\r
+\r
+ /* Send the dataflash buffer write command */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+ Dataflash_SendAddressBytes(0, 0);\r
+ }\r
+ \r
+ /* Write one 16-byte chunk of data to the dataflash */\r
+ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+ Dataflash_SendByte(*(BufferPtr++));\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+\r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return; \r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter and reset the sub block counter */\r
+ TotalBlocks--;\r
+ }\r
+\r
+ /* Write the dataflash buffer contents back to the dataflash page */\r
+ Dataflash_ToggleSelectedChipCS();\r
+ Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+ Dataflash_WaitWhileBusy();\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ * the a preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read\r
+ * the files stored on the dataflash.\r
+ *\r
+ * \param BlockAddress Data block starting address for the read sequence\r
+ * \param TotalBlocks Number of blocks of data to read\r
+ * \param BufferPtr Pointer to the data destination RAM buffer\r
+ */\r
+void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+\r
+ while (TotalBlocks)\r
+ {\r
+ uint8_t BytesInBlockDiv16 = 0;\r
+ \r
+ /* Write an endpoint packet sized data block to the dataflash */\r
+ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+ {\r
+ /* Check if end of dataflash page reached */\r
+ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+ {\r
+ /* Reset the dataflash buffer counter, increment the page counter */\r
+ CurrDFPageByteDiv16 = 0;\r
+ CurrDFPage++;\r
+\r
+ /* Select the next dataflash chip based on the new dataflash page index */\r
+ Dataflash_SelectChipFromPage(CurrDFPage);\r
+ \r
+ /* Send the dataflash main memory page read command */\r
+ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+ Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ Dataflash_SendByte(0x00);\r
+ } \r
+\r
+ /* Read one 16-byte chunk of data from the dataflash */\r
+ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+ *(BufferPtr++) = Dataflash_ReceiveByte();\r
+ \r
+ /* Increment the dataflash page 16 byte block counter */\r
+ CurrDFPageByteDiv16++;\r
+ \r
+ /* Increment the block 16 byte block counter */\r
+ BytesInBlockDiv16++;\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return;\r
+ }\r
+ \r
+ /* Decrement the blocks remaining counter */\r
+ TotalBlocks--;\r
+ }\r
+\r
+ /* Deselect all dataflash chips */\r
+ Dataflash_DeselectChip();\r
+}\r
+\r
+/** Disables the dataflash memory write protection bits on the board Dataflash ICs, if enabled. */\r
+void DataflashManager_ResetDataflashProtections(void)\r
+{\r
+ /* Select first dataflash chip, send the read status register command */\r
+ Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+ Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+ \r
+ /* Check if sector protection is enabled */\r
+ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+ {\r
+ Dataflash_ToggleSelectedChipCS();\r
+\r
+ /* Send the commands to disable sector protection */\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+ }\r
+ \r
+ /* Select second dataflash chip (if present on selected board), send read status register command */\r
+ #if (DATAFLASH_TOTALCHIPS == 2)\r
+ Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+ Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+ \r
+ /* Check if sector protection is enabled */\r
+ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+ {\r
+ Dataflash_ToggleSelectedChipCS();\r
+\r
+ /* Send the commands to disable sector protection */\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+ }\r
+ #endif\r
+ \r
+ /* Deselect current dataflash chip */\r
+ Dataflash_DeselectChip();\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for DataflashManager.c.\r
+ */\r
+ \r
+#ifndef _DATAFLASH_MANAGER_H\r
+#define _DATAFLASH_MANAGER_H\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ \r
+ #include "MassStorage.h"\r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Common/Common.h> // Function Attribute, Atomic, Debug and ISR Macros\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Dataflash.h> // Dataflash chip driver\r
+\r
+ /* Preprocessor Checks: */\r
+ #if (DATAFLASH_PAGE_SIZE % 16)\r
+ #error Dataflash page size must be a multiple of 16 bytes.\r
+ #endif\r
+\r
+ /* Defines: */\r
+ /** Total number of bytes of the storage medium, comprised of one or more dataflash ICs. */\r
+ #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
+\r
+ /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
+ * storage media (Dataflash) using a different native block size.\r
+ */\r
+ #define VIRTUAL_MEMORY_BLOCK_SIZE 512\r
+ \r
+ /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */\r
+ #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
+ \r
+ /* Function Prototypes: */\r
+ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+ void DataflashManager_ResetDataflashProtections(void);\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage\r
+ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,\r
+ * which wrap around standard SCSI device commands for controlling the actual storage medium.\r
+ */\r
+ \r
+#define INCLUDE_FROM_SCSI_C\r
+#include "SCSI.h"\r
+\r
+/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's\r
+ * features and capabilities.\r
+ */\r
+SCSI_Inquiry_Response_t InquiryData = \r
+ {\r
+ .DeviceType = DEVICE_TYPE_BLOCK,\r
+ .PeripheralQualifier = 0,\r
+ \r
+ .Removable = true,\r
+ \r
+ .Version = 0,\r
+ \r
+ .ResponseDataFormat = 2,\r
+ .NormACA = false,\r
+ .TrmTsk = false,\r
+ .AERC = false,\r
+\r
+ .AdditionalLength = 0x1F,\r
+ \r
+ .SoftReset = false,\r
+ .CmdQue = false,\r
+ .Linked = false,\r
+ .Sync = false,\r
+ .WideBus16Bit = false,\r
+ .WideBus32Bit = false,\r
+ .RelAddr = false,\r
+ \r
+ .VendorID = "LUFA",\r
+ .ProductID = "Dataflash Disk",\r
+ .RevisionID = {'0','.','0','0'},\r
+ };\r
+\r
+/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE\r
+ * command is issued. This gives information on exactly why the last command failed to complete.\r
+ */\r
+SCSI_Request_Sense_Response_t SenseData =\r
+ {\r
+ .ResponseCode = 0x70,\r
+ .AdditionalLength = 0x0A,\r
+ };\r
+\r
+\r
+/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches\r
+ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns\r
+ * a command failure due to a ILLEGAL REQUEST.\r
+ */\r
+void SCSI_DecodeSCSICommand(void)\r
+{\r
+ bool CommandSuccess = false;\r
+\r
+ /* Run the appropriate SCSI command hander function based on the passed command */\r
+ switch (CommandBlock.SCSICommandData[0])\r
+ {\r
+ case SCSI_CMD_INQUIRY:\r
+ CommandSuccess = SCSI_Command_Inquiry(); \r
+ break;\r
+ case SCSI_CMD_REQUEST_SENSE:\r
+ CommandSuccess = SCSI_Command_Request_Sense();\r
+ break;\r
+ case SCSI_CMD_READ_CAPACITY_10:\r
+ CommandSuccess = SCSI_Command_Read_Capacity_10(); \r
+ break;\r
+ case SCSI_CMD_SEND_DIAGNOSTIC:\r
+ CommandSuccess = SCSI_Command_Send_Diagnostic();\r
+ break;\r
+ case SCSI_CMD_WRITE_10:\r
+ CommandSuccess = SCSI_Command_ReadWrite_10(DATA_WRITE);\r
+ break;\r
+ case SCSI_CMD_READ_10:\r
+ CommandSuccess = SCSI_Command_ReadWrite_10(DATA_READ);\r
+ break;\r
+ case SCSI_CMD_TEST_UNIT_READY:\r
+ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:\r
+ case SCSI_CMD_VERIFY_10:\r
+ /* These commands should just succeed, no handling required */\r
+ CommandSuccess = true;\r
+ CommandBlock.DataTransferLength = 0;\r
+ break;\r
+ default:\r
+ /* Update the SENSE key to reflect the invalid command */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_INVALID_COMMAND,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+ break;\r
+ }\r
+ \r
+ /* Check if command was successfully processed */\r
+ if (CommandSuccess)\r
+ {\r
+ /* Command succeeded - set the CSW status and update the SENSE key */\r
+ CommandStatus.Status = Command_Pass;\r
+ \r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+ SCSI_ASENSEQ_NO_QUALIFIER); \r
+ }\r
+ else\r
+ {\r
+ /* Command failed - set the CSW status - failed command function updates the SENSE key */\r
+ CommandStatus.Status = Command_Fail;\r
+ }\r
+}\r
+\r
+/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features\r
+ * and capabilities to the host.\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Inquiry(void)\r
+{\r
+ uint16_t AllocationLength = (((uint16_t)CommandBlock.SCSICommandData[3] << 8) |\r
+ CommandBlock.SCSICommandData[4]);\r
+ uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :\r
+ sizeof(InquiryData);\r
+\r
+ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */\r
+ if ((CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||\r
+ CommandBlock.SCSICommandData[2])\r
+ {\r
+ /* Optional but unsupported bits set - update the SENSE key and fail the request */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+ return false;\r
+ }\r
+\r
+ /* Write the INQUIRY data to the endpoint */\r
+ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, StreamCallback_AbortOnMassStoreReset);\r
+\r
+ uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+ \r
+ /* Pad out remaining bytes with 0x00 */\r
+ Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), StreamCallback_AbortOnMassStoreReset);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Succeed the command and update the bytes transferred counter */\r
+ CommandBlock.DataTransferLength -= BytesTransferred;\r
+ \r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,\r
+ * including the error code and additional error information so that the host can determine why a command failed to complete.\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Request_Sense(void)\r
+{\r
+ uint8_t AllocationLength = CommandBlock.SCSICommandData[4];\r
+ uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);\r
+ \r
+ /* Send the SENSE data - this indicates to the host the status of the last command */\r
+ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, StreamCallback_AbortOnMassStoreReset);\r
+ \r
+ uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+ \r
+ /* Pad out remaining bytes with 0x00 */\r
+ Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), StreamCallback_AbortOnMassStoreReset);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Succeed the command and update the bytes transferred counter */\r
+ CommandBlock.DataTransferLength -= BytesTransferred;\r
+\r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity\r
+ * on the selected Logical Unit (drive), as a number of OS-sized blocks.\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Read_Capacity_10(void)\r
+{\r
+ /* Send the total number of logical blocks in the current LUN */\r
+ Endpoint_Write_DWord_BE(LUN_MEDIA_BLOCKS - 1);\r
+\r
+ /* Send the logical block size of the device (must be 512 bytes) */\r
+ Endpoint_Write_DWord_BE(VIRTUAL_MEMORY_BLOCK_SIZE);\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return false;\r
+\r
+ /* Send the endpoint data packet to the host */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Succeed the command and update the bytes transferred counter */\r
+ CommandBlock.DataTransferLength -= 8;\r
+ \r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the\r
+ * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is\r
+ * supported.\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Send_Diagnostic(void)\r
+{\r
+ uint8_t ReturnByte;\r
+\r
+ /* Check to see if the SELF TEST bit is not set */\r
+ if (!(CommandBlock.SCSICommandData[1] & (1 << 2)))\r
+ {\r
+ /* Only self-test supported - update SENSE key and fail the command */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+ return false;\r
+ }\r
+ \r
+ /* Test first Dataflash IC is present and responding to commands */\r
+ Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+ ReturnByte = Dataflash_ReceiveByte();\r
+ Dataflash_DeselectChip();\r
+\r
+ /* If returned data is invalid, fail the command */\r
+ if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+ {\r
+ /* Update SENSE key with a hardware error condition and return command fail */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+ SCSI_ASENSEQ_NO_QUALIFIER); \r
+ \r
+ return false;\r
+ }\r
+\r
+ #if (DATAFLASH_TOTALCHIPS == 2)\r
+ /* Test second Dataflash IC is present and responding to commands */\r
+ Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+ ReturnByte = Dataflash_ReceiveByte();\r
+ Dataflash_DeselectChip();\r
+\r
+ /* If returned data is invalid, fail the command */\r
+ if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+ {\r
+ /* Update SENSE key with a hardware error condition and return command fail */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+ SCSI_ASENSEQ_NO_QUALIFIER); \r
+ \r
+ return false;\r
+ }\r
+ #endif\r
+ \r
+ /* Succeed the command and update the bytes transferred counter */\r
+ CommandBlock.DataTransferLength = 0;\r
+ \r
+ return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address\r
+ * and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual\r
+ * reading and writing of the data.\r
+ *\r
+ * \param IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)\r
+ *\r
+ * \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_ReadWrite_10(const bool IsDataRead)\r
+{\r
+ uint32_t BlockAddress;\r
+ uint16_t TotalBlocks;\r
+ \r
+ /* Load in the 32-bit block address (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+ ((uint8_t*)&BlockAddress)[3] = CommandBlock.SCSICommandData[2];\r
+ ((uint8_t*)&BlockAddress)[2] = CommandBlock.SCSICommandData[3];\r
+ ((uint8_t*)&BlockAddress)[1] = CommandBlock.SCSICommandData[4];\r
+ ((uint8_t*)&BlockAddress)[0] = CommandBlock.SCSICommandData[5];\r
+\r
+ /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+ ((uint8_t*)&TotalBlocks)[1] = CommandBlock.SCSICommandData[7];\r
+ ((uint8_t*)&TotalBlocks)[0] = CommandBlock.SCSICommandData[8];\r
+ \r
+ /* Check if the block address is outside the maximum allowable value for the LUN */\r
+ if (BlockAddress >= LUN_MEDIA_BLOCKS)\r
+ {\r
+ /* Block address is invalid, update SENSE key and return command fail */\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,\r
+ SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+ return false;\r
+ }\r
+\r
+ #if (TOTAL_LUNS > 1)\r
+ /* Adjust the given block address to the real media address based on the selected LUN */\r
+ BlockAddress += ((uint32_t)CommandBlock.LUN * LUN_MEDIA_BLOCKS);\r
+ #endif\r
+ \r
+ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */\r
+ if (IsDataRead == DATA_READ)\r
+ DataflashManager_ReadBlocks(BlockAddress, TotalBlocks);\r
+ else\r
+ DataflashManager_WriteBlocks(BlockAddress, TotalBlocks);\r
+\r
+ /* Update the bytes transferred counter and succeed the command */\r
+ CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);\r
+ \r
+ return true;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for SCSI.c.\r
+ */\r
+ \r
+#ifndef _SCSI_H_\r
+#define _SCSI_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+\r
+ #include <LUFA/Common/Common.h> // Function Attribute, Atomic, Debug and ISR Macros\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+\r
+ #include "MassStorage.h"\r
+ #include "Descriptors.h"\r
+ #include "DataflashManager.h"\r
+ #include "SCSI_Codes.h"\r
+ \r
+ /* Macros: */\r
+ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This\r
+ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about\r
+ * the last command failure) in a quick and easy manner.\r
+ *\r
+ * \param key New SCSI sense key to set the sense code to\r
+ * \param acode New SCSI additional sense key to set the additional sense code to\r
+ * \param aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to\r
+ */\r
+ #define SCSI_SET_SENSE(key, acode, aqual) MACROS{ SenseData.SenseKey = key; \\r
+ SenseData.AdditionalSenseCode = acode; \\r
+ SenseData.AdditionalSenseQualifier = aqual; }MACROE\r
+\r
+ /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */\r
+ #define DATA_READ true\r
+\r
+ /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */\r
+ #define DATA_WRITE false\r
+\r
+ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */\r
+ #define DEVICE_TYPE_BLOCK 0x00\r
+ \r
+ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */\r
+ #define DEVICE_TYPE_CDROM 0x05\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the\r
+ * structure contents, refer to the SCSI specifications.\r
+ */\r
+ typedef struct\r
+ {\r
+ unsigned char DeviceType : 5;\r
+ unsigned char PeripheralQualifier : 3;\r
+ \r
+ unsigned char _RESERVED1 : 7;\r
+ unsigned char Removable : 1;\r
+ \r
+ uint8_t Version;\r
+ \r
+ unsigned char ResponseDataFormat : 4;\r
+ unsigned char _RESERVED2 : 1;\r
+ unsigned char NormACA : 1;\r
+ unsigned char TrmTsk : 1;\r
+ unsigned char AERC : 1;\r
+\r
+ uint8_t AdditionalLength;\r
+ uint8_t _RESERVED3[2];\r
+\r
+ unsigned char SoftReset : 1;\r
+ unsigned char CmdQue : 1;\r
+ unsigned char _RESERVED4 : 1;\r
+ unsigned char Linked : 1;\r
+ unsigned char Sync : 1;\r
+ unsigned char WideBus16Bit : 1;\r
+ unsigned char WideBus32Bit : 1;\r
+ unsigned char RelAddr : 1;\r
+ \r
+ uint8_t VendorID[8];\r
+ uint8_t ProductID[16];\r
+ uint8_t RevisionID[4];\r
+ } SCSI_Inquiry_Response_t;\r
+ \r
+ /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the\r
+ * structure contents, refer to the SCSI specifications.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t ResponseCode;\r
+ \r
+ uint8_t SegmentNumber;\r
+ \r
+ unsigned char SenseKey : 4;\r
+ unsigned char _RESERVED1 : 1;\r
+ unsigned char ILI : 1;\r
+ unsigned char EOM : 1;\r
+ unsigned char FileMark : 1;\r
+ \r
+ uint8_t Information[4];\r
+ uint8_t AdditionalLength;\r
+ uint8_t CmdSpecificInformation[4];\r
+ uint8_t AdditionalSenseCode;\r
+ uint8_t AdditionalSenseQualifier;\r
+ uint8_t FieldReplaceableUnitCode;\r
+ uint8_t SenseKeySpecific[3];\r
+ } SCSI_Request_Sense_Response_t;\r
+ \r
+ /* Function Prototypes: */\r
+ void SCSI_DecodeSCSICommand(void);\r
+ \r
+ #if defined(INCLUDE_FROM_SCSI_C)\r
+ static bool SCSI_Command_Inquiry(void);\r
+ static bool SCSI_Command_Request_Sense(void);\r
+ static bool SCSI_Command_Read_Capacity_10(void);\r
+ static bool SCSI_Command_Send_Diagnostic(void);\r
+ static bool SCSI_Command_ReadWrite_10(const bool IsDataRead);\r
+ #endif\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header containing macros for possible SCSI commands and SENSE data. Refer to\r
+ * the SCSI standard documentation for more information on each SCSI command and\r
+ * the SENSE data.\r
+ */\r
+ \r
+#ifndef _SCSI_CODES_H_\r
+#define _SCSI_CODES_H_\r
+\r
+ /* Macros: */\r
+ #define SCSI_CMD_INQUIRY 0x12\r
+ #define SCSI_CMD_REQUEST_SENSE 0x03\r
+ #define SCSI_CMD_TEST_UNIT_READY 0x00\r
+ #define SCSI_CMD_READ_CAPACITY_10 0x25\r
+ #define SCSI_CMD_SEND_DIAGNOSTIC 0x1D\r
+ #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E\r
+ #define SCSI_CMD_WRITE_10 0x2A\r
+ #define SCSI_CMD_READ_10 0x28\r
+ #define SCSI_CMD_WRITE_6 0x0A\r
+ #define SCSI_CMD_READ_6 0x08\r
+ #define SCSI_CMD_VERIFY_10 0x2F\r
+ #define SCSI_CMD_MODE_SENSE_6 0x1A\r
+ #define SCSI_CMD_MODE_SENSE_10 0x5A\r
+\r
+ #define SCSI_SENSE_KEY_GOOD 0x00\r
+ #define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01\r
+ #define SCSI_SENSE_KEY_NOT_READY 0x02\r
+ #define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03\r
+ #define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04\r
+ #define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05\r
+ #define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06\r
+ #define SCSI_SENSE_KEY_DATA_PROTECT 0x07\r
+ #define SCSI_SENSE_KEY_BLANK_CHECK 0x08\r
+ #define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09\r
+ #define SCSI_SENSE_KEY_COPY_ABORTED 0x0A\r
+ #define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B\r
+ #define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D\r
+ #define SCSI_SENSE_KEY_MISCOMPARE 0x0E\r
+\r
+ #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION 0x00\r
+ #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY 0x04\r
+ #define SCSI_ASENSE_INVALID_FIELD_IN_CDB 0x24\r
+ #define SCSI_ASENSE_WRITE_PROTECTED 0x27\r
+ #define SCSI_ASENSE_FORMAT_ERROR 0x31\r
+ #define SCSI_ASENSE_INVALID_COMMAND 0x20\r
+ #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21\r
+ #define SCSI_ASENSE_MEDIUM_NOT_PRESENT 0x3A\r
+\r
+ #define SCSI_ASENSEQ_NO_QUALIFIER 0x00\r
+ #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED 0x01\r
+ #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED 0x02\r
+ #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07\r
+\r
+#endif\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>MassStorage</ProjectName><Created>30-Sep-2008 14:12:09</Created><LastEdit>30-Sep-2008 14:12:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:12:09</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\Demos\MassStorage\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>DataflashManager.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MassStorage.c</SOURCEFILE><SOURCEFILE>SCSI.c</SOURCEFILE><HEADERFILE>DataflashManager.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MassStorage.h</HEADERFILE><HEADERFILE>SCSI.h</HEADERFILE><HEADERFILE>SCSI_Codes.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MassStorage.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Mass Storage demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#define INCLUDE_FROM_MASSSTORAGE_C\r
+#include "MassStorage.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_MassStorage , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Global Variables */\r
+/** Structure to hold the latest Command Block Wrapper issued by the host, containing a SCSI command to execute. */\r
+CommandBlockWrapper_t CommandBlock;\r
+\r
+/** Structure to hold the latest Command Status Wrapper to return to the host, containing the status of the last issued command. */\r
+CommandStatusWrapper_t CommandStatus = { .Signature = CSW_SIGNATURE };\r
+\r
+/** Flag to asynchronously abort any in-progress data transfers upon the reception of a mass storage reset command. */\r
+volatile bool IsMassStoreReset = false;\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
+\r
+ /* Clear Dataflash sector protections, if enabled */\r
+ DataflashManager_ResetDataflashProtections();\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+ \r
+ /* Reset the MSReset flag upon connection */\r
+ IsMassStoreReset = false;\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the Mass Storage management task.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running mass storage task */\r
+ Scheduler_SetTaskMode(USB_MassStorage, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the Mass Storage management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup Mass Storage In and Out Endpoints */\r
+ Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, MASS_STORAGE_IO_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE);\r
+\r
+ Endpoint_ConfigureEndpoint(MASS_STORAGE_OUT_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, MASS_STORAGE_IO_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+ \r
+ /* Start mass storage task */\r
+ Scheduler_SetTaskMode(USB_MassStorage, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the Mass Storage class-specific\r
+ * requests) so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Process UFI specific control requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_MassStorageReset:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Indicate that the current transfer should be aborted */\r
+ IsMassStoreReset = true; \r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+\r
+ break;\r
+ case REQ_GetMaxLUN:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Indicate to the host the number of supported LUNs (virtual disks) on the device */\r
+ Endpoint_Write_Byte(TOTAL_LUNS - 1);\r
+ \r
+ Endpoint_ClearIN();\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the MassStorage_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ case Status_CommandBlockError:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_ProcessingCommandBlock:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the Mass Storage interface, reading in Command Block Wrappers from the host, processing the SCSI commands they\r
+ * contain, and returning Command Status Wrappers back to the host to indicate the success or failure of the last issued command.\r
+ */\r
+TASK(USB_MassStorage)\r
+{\r
+ /* Check if the USB System is connected to a Host */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Select the Data Out Endpoint */\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+ \r
+ /* Check to see if a command from the host has been issued */\r
+ if (Endpoint_IsReadWriteAllowed())\r
+ { \r
+ /* Indicate busy */\r
+ UpdateStatus(Status_ProcessingCommandBlock);\r
+\r
+ /* Process sent command block from the host */\r
+ if (ReadInCommandBlock())\r
+ {\r
+ /* Check direction of command, select Data IN endpoint if data is from the device */\r
+ if (CommandBlock.Flags & COMMAND_DIRECTION_DATA_IN)\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+\r
+ /* Decode the received SCSI command */\r
+ SCSI_DecodeSCSICommand();\r
+\r
+ /* Load in the CBW tag into the CSW to link them together */\r
+ CommandStatus.Tag = CommandBlock.Tag;\r
+\r
+ /* Load in the data residue counter into the CSW */\r
+ CommandStatus.DataTransferResidue = CommandBlock.DataTransferLength;\r
+\r
+ /* Stall the selected data pipe if command failed (if data is still to be transferred) */\r
+ if ((CommandStatus.Status == Command_Fail) && (CommandStatus.DataTransferResidue))\r
+ Endpoint_StallTransaction();\r
+\r
+ /* Return command status block to the host */\r
+ ReturnCommandStatus();\r
+ \r
+ /* Check if a Mass Storage Reset occurred */\r
+ if (IsMassStoreReset)\r
+ {\r
+ /* Reset the data endpoint banks */\r
+ Endpoint_ResetFIFO(MASS_STORAGE_OUT_EPNUM);\r
+ Endpoint_ResetFIFO(MASS_STORAGE_IN_EPNUM);\r
+ \r
+ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+ Endpoint_ClearStall();\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+ Endpoint_ClearStall();\r
+\r
+ /* Clear the abort transfer flag */\r
+ IsMassStoreReset = false;\r
+ }\r
+\r
+ /* Indicate ready */\r
+ UpdateStatus(Status_USBReady);\r
+ }\r
+ else\r
+ {\r
+ /* Indicate error reading in the command block from the host */\r
+ UpdateStatus(Status_CommandBlockError);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+/** Function to read in a command block from the host, via the bulk data OUT endpoint. This function reads in the next command block\r
+ * if one has been issued, and performs validation to ensure that the block command is valid.\r
+ *\r
+ * \return Boolean true if a valid command block has been read in from the endpoint, false otherwise\r
+ */\r
+static bool ReadInCommandBlock(void)\r
+{\r
+ /* Select the Data Out endpoint */\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+\r
+ /* Read in command block header */\r
+ Endpoint_Read_Stream_LE(&CommandBlock, (sizeof(CommandBlock) - sizeof(CommandBlock.SCSICommandData)),\r
+ StreamCallback_AbortOnMassStoreReset);\r
+\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return false;\r
+\r
+ /* Verify the command block - abort if invalid */\r
+ if ((CommandBlock.Signature != CBW_SIGNATURE) ||\r
+ (CommandBlock.LUN >= TOTAL_LUNS) ||\r
+ (CommandBlock.SCSICommandLength > MAX_SCSI_COMMAND_LENGTH))\r
+ {\r
+ /* Stall both data pipes until reset by host */\r
+ Endpoint_StallTransaction();\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+ Endpoint_StallTransaction();\r
+ \r
+ return false;\r
+ }\r
+\r
+ /* Read in command block command data */\r
+ Endpoint_Read_Stream_LE(&CommandBlock.SCSICommandData,\r
+ CommandBlock.SCSICommandLength,\r
+ StreamCallback_AbortOnMassStoreReset);\r
+ \r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return false;\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearOUT();\r
+ \r
+ return true;\r
+}\r
+\r
+/** Returns the filled Command Status Wrapper back to the host via the bulk data IN endpoint, waiting for the host to clear any\r
+ * stalled data endpoints as needed.\r
+ */\r
+static void ReturnCommandStatus(void)\r
+{\r
+ /* Select the Data Out endpoint */\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+\r
+ /* While data pipe is stalled, wait until the host issues a control request to clear the stall */\r
+ while (Endpoint_IsStalled())\r
+ {\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return;\r
+ }\r
+\r
+ /* Select the Data In endpoint */\r
+ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+\r
+ /* While data pipe is stalled, wait until the host issues a control request to clear the stall */\r
+ while (Endpoint_IsStalled())\r
+ {\r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return;\r
+ }\r
+ \r
+ /* Write the CSW to the endpoint */\r
+ Endpoint_Write_Stream_LE(&CommandStatus, sizeof(CommandStatus),\r
+ StreamCallback_AbortOnMassStoreReset);\r
+ \r
+ /* Check if the current command is being aborted by the host */\r
+ if (IsMassStoreReset)\r
+ return;\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+}\r
+\r
+/** Stream callback function for the Endpoint stream read and write functions. This callback will abort the current stream transfer\r
+ * if a Mass Storage Reset request has been issued to the control endpoint.\r
+ */\r
+uint8_t StreamCallback_AbortOnMassStoreReset(void)\r
+{ \r
+ /* Abort if a Mass Storage reset command was received */\r
+ if (IsMassStoreReset)\r
+ return STREAMCALLBACK_Abort;\r
+ \r
+ /* Continue with the current stream operation */\r
+ return STREAMCALLBACK_Continue;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for MassStorage.c.\r
+ */\r
+\r
+#ifndef _MASS_STORAGE_H_\r
+#define _MASS_STORAGE_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include "Lib/SCSI.h"\r
+ #include "Lib/DataflashManager.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Drivers/Board/Dataflash.h> // Dataflash chip driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+\r
+ /* Macros: */\r
+ /** Mass Storage Class specific request to reset the Mass Storage interface, ready for the next command. */\r
+ #define REQ_MassStorageReset 0xFF\r
+\r
+ /** Mass Storage Class specific request to retrieve the total number of Logical Units (drives) in the SCSI device. */\r
+ #define REQ_GetMaxLUN 0xFE\r
+\r
+ /** Maximum length of a SCSI command which can be issued by the device or host in a Mass Storage bulk wrapper. */\r
+ #define MAX_SCSI_COMMAND_LENGTH 16\r
+ \r
+ /** Total number of Logical Units (drives) in the device. The total device capacity is shared equally between\r
+ * each drive - this can be set to any positive non-zero amount.\r
+ */\r
+ #define TOTAL_LUNS 2\r
+ \r
+ /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */\r
+ #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) \r
+ \r
+ /** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */\r
+ #define CBW_SIGNATURE 0x43425355UL\r
+\r
+ /** Magic signature for a Command Status Wrapper used in the Mass Storage Bulk-Only transport protocol. */\r
+ #define CSW_SIGNATURE 0x53425355UL\r
+ \r
+ /** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from host-to-device. */\r
+ #define COMMAND_DIRECTION_DATA_OUT (0 << 7)\r
+\r
+ /** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from device-to-host. */\r
+ #define COMMAND_DIRECTION_DATA_IN (1 << 7)\r
+\r
+ /* Type defines: */\r
+ /** Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */\r
+ typedef struct\r
+ {\r
+ uint32_t Signature; /**< Command block signature, must be CBW_SIGNATURE to indicate a valid Command Block */\r
+ uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper */\r
+ uint32_t DataTransferLength; /** Length of the optional data portion of the issued command, in bytes */\r
+ uint8_t Flags; /**< Command block flags, indicating command data direction */\r
+ uint8_t LUN; /**< Logical Unit number this command is issued to */\r
+ uint8_t SCSICommandLength; /**< Length of the issued SCSI command within the SCSI command data array */\r
+ uint8_t SCSICommandData[MAX_SCSI_COMMAND_LENGTH]; /**< Issued SCSI command in the Command Block */\r
+ } CommandBlockWrapper_t;\r
+ \r
+ /** Type define for a Command Status Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */\r
+ typedef struct\r
+ {\r
+ uint32_t Signature; /**< Status block signature, must be CSW_SIGNATURE to indicate a valid Command Status */\r
+ uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper */\r
+ uint32_t DataTransferResidue; /**< Number of bytes of data not processed in the SCSI command */\r
+ uint8_t Status; /**< Status code of the issued command - a value from the MassStorage_CommandStatusCodes_t enum */\r
+ } CommandStatusWrapper_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible command status wrapper return status codes. */\r
+ enum MassStorage_CommandStatusCodes_t\r
+ {\r
+ Command_Pass = 0, /**< Command completed with no error */\r
+ Command_Fail = 1, /**< Command failed to complete - host may check the exact error via a SCSI REQUEST SENSE command */\r
+ Phase_Error = 2 /**< Command failed due to being invalid in the current phase */\r
+ };\r
+\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum MassStorage_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ Status_CommandBlockError = 3, /**< Processing a SCSI command block from the host */\r
+ Status_ProcessingCommandBlock = 4, /**< Error during the processing of a SCSI command block from the host */\r
+ };\r
+ \r
+ /* Global Variables: */\r
+ extern CommandBlockWrapper_t CommandBlock;\r
+ extern CommandStatusWrapper_t CommandStatus;\r
+ extern volatile bool IsMassStoreReset;\r
+\r
+ /* Task Definitions: */\r
+ TASK(USB_MassStorage);\r
+ \r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+ #if defined(INCLUDE_FROM_MASSSTORAGE_C)\r
+ static bool ReadInCommandBlock(void);\r
+ static void ReturnCommandStatus(void);\r
+ #endif\r
+\r
+ uint8_t StreamCallback_AbortOnMassStoreReset(void);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Mass Storage Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Mass Storage Device</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Bulk-Only Transport</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF Mass Storage Standard</td>\r
+ * <td>USB Bulk-Only Transport Standard</td>\r
+ * <td>SCSI Primary Commands Specification</td>\r
+ * <td>SCSI Block Commands Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Dual LUN Mass Storage demonstration application. This gives a simple\r
+ * reference application for implementing a multiple LUN USB Mass Storage\r
+ * device using the basic USB UFI drivers in all modern OSes (i.e. no\r
+ * special drivers required).\r
+ * \r
+ * On start-up the system will automatically enumerate and function as an\r
+ * external mass storage device with two LUNs (separate disks) which may\r
+ * be formatted and used in the same manner as commercial USB Mass Storage\r
+ * devices.\r
+ * \r
+ * You will need to format the mass storage drives upon first run of this\r
+ * demonstration - as the device acts only as a data block transport between\r
+ * the host and the storage media, it does not matter what file system is used,\r
+ * as the data interpretation is performed by the host and not the USB device.\r
+ * \r
+ * This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS\r
+ * value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to\r
+ * 255), with each LUN being allocated an equal portion of the available\r
+ * Dataflash memory.\r
+ *\r
+ * The USB control endpoint is managed entirely by the library using endpoint\r
+ * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for\r
+ * the host to reset the Mass Storage device state during long transfers without\r
+ * the need for complicated polling logic.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>TOTAL_LUNS</td>\r
+ * <td>MassStorage.h</td>\r
+ * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive\r
+ * - this can be set to any positive non-zero amount.</td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MassStorage\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ Lib/SCSI.c \\r
+ Lib/DataflashManager.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DINTERRUPT_CONTROL_ENDPOINT\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax\r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ * more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
+ 0x09, 0x02, /* Usage (Mouse) */\r
+ 0xA1, 0x01, /* Collection (Application) */\r
+ 0x09, 0x01, /* Usage (Pointer) */\r
+ 0xA1, 0x00, /* Collection (Application) */\r
+ 0x95, 0x03, /* Report Count (3) */\r
+ 0x75, 0x01, /* Report Size (1) */\r
+ 0x05, 0x09, /* Usage Page (Button) */\r
+ 0x19, 0x01, /* Usage Minimum (Button 1) */\r
+ 0x29, 0x03, /* Usage Maximum (Button 3) */\r
+ 0x15, 0x00, /* Logical Minimum (0) */\r
+ 0x25, 0x01, /* Logical Maximum (1) */\r
+ 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
+ 0x95, 0x01, /* Report Count (1) */\r
+ 0x75, 0x05, /* Report Size (5) */\r
+ 0x81, 0x01, /* Input (Constant) */\r
+ 0x75, 0x08, /* Report Size (8) */\r
+ 0x95, 0x02, /* Report Count (2) */\r
+ 0x05, 0x01, /* Usage Page (Generic Desktop Control) */\r
+ 0x09, 0x30, /* Usage X */\r
+ 0x09, 0x31, /* Usage Y */\r
+ 0x15, 0x81, /* Logical Minimum (-127) */\r
+ 0x25, 0x7F, /* Logical Maximum (127) */\r
+ 0x81, 0x06, /* Input (Data, Variable, Relative) */\r
+ 0xC0, /* End Collection */\r
+ 0xC0 /* End Collection */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x00,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x2041,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 1,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0x00,\r
+ .AlternateSetting = 0x00,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x03,\r
+ .SubClass = 0x01,\r
+ .Protocol = 0x02,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .MouseHID = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+ \r
+ .HIDSpec = VERSION_BCD(01.11),\r
+ .CountryCode = 0x00,\r
+ .TotalReportDescriptors = 1,\r
+ .HIDReportType = DTYPE_Report,\r
+ .HIDReportLength = sizeof(MouseReport)\r
+ },\r
+\r
+ .MouseEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = MOUSE_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ } \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA Mouse Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration:\r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String:\r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00:\r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01:\r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02:\r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ case DTYPE_HID: \r
+ Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+ Size = sizeof(USB_Descriptor_HID_t);\r
+ break;\r
+ case DTYPE_Report: \r
+ Address = (void*)&MouseReport;\r
+ Size = sizeof(MouseReport);\r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address; \r
+ return Size;\r
+}\r
+\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+ * specification for details on the structure elements.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Header_t Header;\r
+ \r
+ uint16_t HIDSpec;\r
+ uint8_t CountryCode;\r
+ \r
+ uint8_t TotalReportDescriptors;\r
+\r
+ uint8_t HIDReportType;\r
+ uint16_t HIDReportLength;\r
+ } USB_Descriptor_HID_t;\r
+\r
+ /** Type define for the data type used to store HID report descriptor elements. */\r
+ typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t Interface;\r
+ USB_Descriptor_HID_t MouseHID;\r
+ USB_Descriptor_Endpoint_t MouseEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+ \r
+ /* Macros: */\r
+ /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+ #define MOUSE_EPNUM 1\r
+ \r
+ /** Size in bytes of the Mouse HID reporting IN endpoint. */\r
+ #define MOUSE_EPSIZE 8\r
+\r
+ /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+ #define DTYPE_HID 0x21\r
+ \r
+ /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+ #define DTYPE_Report 0x22\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>Mouse</ProjectName><Created>30-Sep-2008 14:13:52</Created><LastEdit>30-Sep-2008 14:14:08</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:52</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\Demos\Mouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Mouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Mouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Mouse.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the Mouse demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+ \r
+#include "Mouse.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = USB_Mouse_Report , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Global Variables */\r
+/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot\r
+ * protocol reporting mode.\r
+ */\r
+bool UsingReportProtocol = true;\r
+\r
+/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports\r
+ * for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse).\r
+ */\r
+uint16_t IdleCount = HID_IDLE_CHANGESONLY;\r
+\r
+/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle\r
+ * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request \r
+ * the current idle period via a Get Idle HID class request, thus its value must be preserved.\r
+ */\r
+uint16_t IdleMSRemaining = 0;\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ Joystick_Init();\r
+ LEDs_Init();\r
+ Buttons_Init();\r
+ \r
+ /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+ OCR0A = 0x7D;\r
+ TCCR0A = (1 << WGM01);\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+ \r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+\r
+ /* Default to report protocol on connect */\r
+ UsingReportProtocol = true;\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management and Mouse reporting tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running mouse reporting and USB management tasks */\r
+ Scheduler_SetTaskMode(USB_Mouse_Report, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the mouse reporting task started.\r
+ */ \r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup Mouse Report Endpoint */\r
+ Endpoint_ConfigureEndpoint(MOUSE_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, MOUSE_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+\r
+ /* Start running mouse reporting task */\r
+ Scheduler_SetTaskMode(USB_Mouse_Report, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ * all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Handle HID Class specific requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetReport:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ USB_MouseReport_Data_t MouseReportData;\r
+\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Create the next mouse report for transmission to the host */\r
+ CreateMouseReport(&MouseReportData);\r
+ \r
+ /* Write the report data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(&MouseReportData, sizeof(MouseReportData));\r
+ \r
+ /* Clear the report data afterwards */\r
+ memset(&MouseReportData, 0, sizeof(MouseReportData));\r
+\r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_GetProtocol:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Write the current protocol flag to the host */\r
+ Endpoint_Write_Byte(UsingReportProtocol);\r
+ \r
+ /* Send the flag to the host */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetProtocol:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Set or clear the flag depending on what the host indicates that the current Protocol should be */\r
+ UsingReportProtocol = (USB_ControlRequest.wValue != 0);\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetIdle:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Get idle period in MSB */\r
+ IdleCount = (USB_ControlRequest.wValue >> 8);\r
+ \r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ case REQ_GetIdle:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ { \r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Write the current idle duration to the host */\r
+ Endpoint_Write_Byte(IdleCount);\r
+ \r
+ /* Send the flag to the host */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsOUTReceived()));\r
+ Endpoint_ClearOUT();\r
+ }\r
+\r
+ break;\r
+ }\r
+}\r
+\r
+/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the\r
+ * scheduler elapsed idle period counter when the host has set an idle period.\r
+ */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+ /* One millisecond has elapsed, decrement the idle time remaining counter if it has not already elapsed */\r
+ if (IdleMSRemaining)\r
+ IdleMSRemaining--;\r
+}\r
+\r
+/** Fills the given HID report data structure with the next HID report to send to the host.\r
+ *\r
+ * \param ReportData Pointer to a HID report data structure to be filled\r
+ */\r
+void CreateMouseReport(USB_MouseReport_Data_t* ReportData)\r
+{\r
+ uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+ uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+ \r
+ /* Clear the report contents */\r
+ memset(ReportData, 0, sizeof(USB_MouseReport_Data_t));\r
+\r
+ if (JoyStatus_LCL & JOY_UP)\r
+ ReportData->Y = -1;\r
+ else if (JoyStatus_LCL & JOY_DOWN)\r
+ ReportData->Y = 1;\r
+\r
+ if (JoyStatus_LCL & JOY_RIGHT)\r
+ ReportData->X = 1;\r
+ else if (JoyStatus_LCL & JOY_LEFT)\r
+ ReportData->X = -1;\r
+\r
+ if (JoyStatus_LCL & JOY_PRESS)\r
+ ReportData->Button = (1 << 0);\r
+ \r
+ if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+ ReportData->Button |= (1 << 1);\r
+}\r
+\r
+/** Sends the next HID report to the host, via the keyboard data endpoint. */\r
+void SendNextReport(void)\r
+{\r
+ static USB_MouseReport_Data_t PrevMouseReportData;\r
+ USB_MouseReport_Data_t MouseReportData;\r
+ bool SendReport;\r
+ \r
+ /* Create the next mouse report for transmission to the host */\r
+ CreateMouseReport(&MouseReportData);\r
+ \r
+ /* Check to see if the report data has changed - if so a report MUST be sent */\r
+ SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0);\r
+ \r
+ /* Override the check if the Y or X values are non-zero - we want continuous movement while the joystick\r
+ * is being held down (via continuous reports), otherwise the cursor will only move once per joystick toggle */\r
+ if ((MouseReportData.Y != 0) || (MouseReportData.X != 0))\r
+ SendReport = true;\r
+ \r
+ /* Save the current report data for later comparison to check for changes */\r
+ PrevMouseReportData = MouseReportData;\r
+ \r
+ /* Check if the idle period is set and has elapsed */\r
+ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining)))\r
+ {\r
+ /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
+ IdleMSRemaining = (IdleCount << 2);\r
+ \r
+ /* Idle period is set and has elapsed, must send a report to the host */\r
+ SendReport = true;\r
+ }\r
+ \r
+ /* Select the Mouse Report Endpoint */\r
+ Endpoint_SelectEndpoint(MOUSE_EPNUM);\r
+\r
+ /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */\r
+ if (Endpoint_IsReadWriteAllowed() && SendReport)\r
+ {\r
+ /* Write Mouse Report Data */\r
+ Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData));\r
+ \r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the Mouse_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage HID report generation and transmission to the host, when in report mode. */\r
+TASK(USB_Mouse_Report)\r
+{\r
+ /* Check if the USB system is connected to a host */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Send the next mouse report to the host */\r
+ SendNextReport();\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Mouse.c.\r
+ */\r
+\r
+#ifndef _MOUSE_H_\r
+#define _MOUSE_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/interrupt.h>\r
+ #include <avr/power.h>\r
+ #include <stdbool.h>\r
+ #include <string.h>\r
+ \r
+ #include "Descriptors.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ \r
+ /* Task Definitions: */\r
+ TASK(USB_Mouse_Report);\r
+\r
+ /* Macros: */\r
+ /** Idle period indicating that reports should be sent only when the inputs have changed */\r
+ #define HID_IDLE_CHANGESONLY 0\r
+ \r
+ /** HID Class specific request to get the next HID report from the device. */\r
+ #define REQ_GetReport 0x01\r
+\r
+ /** HID Class specific request to get the idle timeout period of the device. */\r
+ #define REQ_GetIdle 0x02\r
+\r
+ /** HID Class specific request to send the next HID report to the device. */\r
+ #define REQ_SetReport 0x09\r
+\r
+ /** HID Class specific request to set the idle timeout period of the device. */\r
+ #define REQ_SetIdle 0x0A\r
+\r
+ /** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
+ #define REQ_GetProtocol 0x03\r
+\r
+ /** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
+ #define REQ_SetProtocol 0x0B\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+ int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+ int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+ } USB_MouseReport_Data_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum Mouse_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+ \r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void CreateMouseReport(USB_MouseReport_Data_t* ReportData);\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage Mouse Device Demo\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Human Interface Device (HID)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>N/A</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Low Speed Mode, Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Mouse demonstration application. This gives a simple reference\r
+ * application for implementing a USB Mouse using the basic USB HID\r
+ * drivers in all modern OSes (i.e. no special drivers required). It is\r
+ * boot protocol compatible, and thus works under compatible BIOS as if\r
+ * it was a native mouse (e.g. PS/2).\r
+ * \r
+ * On start-up the system will automatically enumerate and function\r
+ * as a mouse when the USB connection to a host is present. To use\r
+ * the mouse, move the joystick to move the pointer, and push the\r
+ * joystick inwards to simulate a left-button click. The HWB serves as\r
+ * the right mouse button.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td>\r
+ * None\r
+ * </td>\r
+ * </tr>\r
+ * </table>\r
+ */\r
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Mouse\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+ \r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+#CFLAGS += -mshort-calls\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+ \r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x02,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204C,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0xFF,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC_Functional_Header = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+ \r
+ .CDC_Functional_CallManagement= \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x00, 0x00}\r
+ },\r
+ \r
+ .CDC_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x00}\r
+ },\r
+ \r
+ .CDC_Functional_Union = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0x02\r
+ },\r
+\r
+ .DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA RNDIS CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device:\r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String:\r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00:\r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01:\r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02:\r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+ * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+ * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+ * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+ *\r
+ * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
+ */ \r
+ #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
+ struct \\r
+ { \\r
+ USB_Descriptor_Header_t Header; \\r
+ uint8_t SubType; \\r
+ uint8_t Data[DataSize]; \\r
+ }\r
+\r
+ /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPNUM 3\r
+\r
+ /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+ #define CDC_TX_EPNUM 1 \r
+\r
+ /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+ #define CDC_RX_EPNUM 2 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 64\r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Header;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
+ USB_Descriptor_Endpoint_t ManagementEndpoint;\r
+ USB_Descriptor_Interface_t DCI_Interface;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - RNDIS Ethernet Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+; Windows LUFA RNDIS Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version]\r
+Signature = "$Windows NT$"\r
+Class = Net\r
+ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}\r
+Provider = %COMPANY%\r
+DriverVer = 06/21/2006,6.0.6000.16384\r
+;CatalogFile = device.cat\r
+\r
+[Manufacturer]\r
+%COMPANY% = RndisDevices,NTx86,NTamd64,NTia64\r
+\r
+; Decoration for x86 architecture\r
+[RndisDevices.NTx86]\r
+%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for x64 architecture\r
+[RndisDevices.NTamd64]\r
+%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for ia64 architecture\r
+[RndisDevices.NTia64]\r
+%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+;@@@ This is the common setting for setup\r
+[ControlFlags]\r
+ExcludeFromSelect=*\r
+\r
+; DDInstall section\r
+; References the in-build Netrndis.inf\r
+[RNDIS.NT.5.1]\r
+Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI\r
+BusType = 15\r
+; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF\r
+include = netrndis.inf\r
+needs = Usb_Rndis.ndi\r
+AddReg = Rndis_AddReg_Vista\r
+\r
+; DDInstal.Services section\r
+[RNDIS.NT.5.1.Services]\r
+include = netrndis.inf\r
+needs = Usb_Rndis.ndi.Services\r
+\r
+; No sys copyfiles - the sys files are already in-build \r
+; (part of the operating system).\r
+\r
+; Modify these strings for your device as needed.\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+RNDISDEV="LUFA USB RNDIS Demo"
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Address Resolution Protocol (ARP) packet handling routines. This protocol handles the\r
+ * conversion of physical MAC addresses to protocol IP addresses between the host and the\r
+ * device.\r
+ */\r
+ \r
+#include "ARP.h"\r
+\r
+/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if the host is requesting the IP or MAC address of the\r
+ * virtual server device on the network.\r
+ *\r
+ * \param InDataStart Pointer to the start of the incoming packet's ARP header\r
+ * \param OutDataStart Pointer to the start of the outgoing packet's ARP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+ DecodeARPHeader(InDataStart);\r
+\r
+ ARP_Header_t* ARPHeaderIN = (ARP_Header_t*)InDataStart;\r
+ ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart;\r
+\r
+ /* Ensure that the ARP request is a IPv4 request packet */\r
+ if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) &&\r
+ (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))\r
+ {\r
+ /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */\r
+ if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || \r
+ MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))\r
+ {\r
+ /* Fill out the ARP response header */\r
+ ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType;\r
+ ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType;\r
+ ARPHeaderOUT->HLEN = ARPHeaderIN->HLEN;\r
+ ARPHeaderOUT->PLEN = ARPHeaderIN->PLEN;\r
+ ARPHeaderOUT->Operation = SwapEndian_16(ARP_OPERATION_REPLY);\r
+\r
+ /* Copy over the sender MAC/IP to the target fields for the response */\r
+ ARPHeaderOUT->THA = ARPHeaderIN->SHA;\r
+ ARPHeaderOUT->TPA = ARPHeaderIN->SPA;\r
+\r
+ /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */\r
+ ARPHeaderOUT->SHA = ServerMACAddress;\r
+ ARPHeaderOUT->SPA = ServerIPAddress;\r
+\r
+ /* Return the size of the response so far */\r
+ return sizeof(ARP_Header_t);\r
+ }\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for ARP.c.\r
+ */\r
+ \r
+#ifndef _ARP_H_\r
+#define _ARP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include <LUFA/Scheduler/Scheduler.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** ARP header operation constant, indicating a request from a host for an address translation */\r
+ #define ARP_OPERATION_REQUEST 1\r
+\r
+ /** ARP header operation constant, indicating a reply from a host giving an address translation */\r
+ #define ARP_OPERATION_REPLY 2\r
+\r
+ /* Type Defines: */\r
+ /** Type define for an ARP packet inside an Ethernet frame. */\r
+ typedef struct\r
+ {\r
+ uint16_t HardwareType; /**< Hardware type constant, indicating the hardware used */\r
+ uint16_t ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */\r
+ \r
+ uint8_t HLEN; /**< Length in bytes of the source/destination hardware addresses */\r
+ uint8_t PLEN; /**< Length in bytes of the source/destination protocol addresses */\r
+ uint16_t Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */\r
+ \r
+ MAC_Address_t SHA; /**< Sender's hardware address */\r
+ IP_Address_t SPA; /**< Sender's protocol address */\r
+ MAC_Address_t THA; /**< Target's hardware address */\r
+ IP_Address_t TPA; /**< Target's protocol address */\r
+ } ARP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol\r
+ * handles the automatic IP negotiation to the host, so that the host will use the provided\r
+ * IP address given to it by the device.\r
+ */\r
+ \r
+#include "DHCP.h"\r
+\r
+/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if the host is requesting or accepting an IP address.\r
+ *\r
+ * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
+ * \param DHCPHeaderInStart Pointer to the start of the incoming packet's DHCP header\r
+ * \param DHCPHeaderOutStart Pointer to the start of the outgoing packet's DHCP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart)\r
+{\r
+ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart;\r
+ DHCP_Header_t* DHCPHeaderIN = (DHCP_Header_t*)DHCPHeaderInStart;\r
+ DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;\r
+ \r
+ uint8_t* DHCPOptionsINStart = (uint8_t*)(DHCPHeaderInStart + sizeof(DHCP_Header_t));\r
+ uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));\r
+\r
+ DecodeDHCPHeader(DHCPHeaderInStart);\r
+\r
+ /* Zero out the response DHCP packet, as much of it legacy and left at 0 */\r
+ memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t));\r
+\r
+ /* Fill out the response DHCP packet */\r
+ DHCPHeaderOUT->HardwareType = DHCPHeaderIN->HardwareType;\r
+ DHCPHeaderOUT->Operation = DHCP_OP_BOOTREPLY;\r
+ DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength;\r
+ DHCPHeaderOUT->Hops = 0;\r
+ DHCPHeaderOUT->TransactionID = DHCPHeaderIN->TransactionID;\r
+ DHCPHeaderOUT->ElapsedSeconds = 0;\r
+ DHCPHeaderOUT->Flags = DHCPHeaderIN->Flags;\r
+ DHCPHeaderOUT->YourIP = ClientIPAddress;\r
+ memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));\r
+ DHCPHeaderOUT->Cookie = SwapEndian_32(DHCP_MAGIC_COOKIE);\r
+ \r
+ /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that\r
+ when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */\r
+ IPHeaderIN->SourceAddress = ClientIPAddress;\r
+ IPHeaderIN->DestinationAddress = ServerIPAddress;\r
+\r
+ /* Process the incoming DHCP packet options */\r
+ while (DHCPOptionsINStart[0] != DHCP_OPTION_END)\r
+ { \r
+ /* Find the Message Type DHCP option, to determine the type of DHCP packet */\r
+ if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)\r
+ {\r
+ if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST))\r
+ {\r
+ /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE;\r
+ *(DHCPOptionsOUTStart++) = 1;\r
+ *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER\r
+ : DHCP_MESSAGETYPE_ACK;\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;\r
+ *(DHCPOptionsOUTStart++) = 4;\r
+ *(DHCPOptionsOUTStart++) = 0xFF;\r
+ *(DHCPOptionsOUTStart++) = 0xFF;\r
+ *(DHCPOptionsOUTStart++) = 0xFF;\r
+ *(DHCPOptionsOUTStart++) = 0x00;\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER;\r
+ *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);\r
+ memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t));\r
+ DHCPOptionsOUTStart += sizeof(IP_Address_t);\r
+\r
+ *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;\r
+ \r
+ return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));\r
+ }\r
+ }\r
+ \r
+ /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */\r
+ DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for DHCP.c.\r
+ */\r
+ \r
+#ifndef _DHCP_H_\r
+#define _DHCP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+\r
+ /* Macros: */\r
+ /** DHCP operation constant, indicating a request from a host to a DHCP server */\r
+ #define DHCP_OP_BOOTREQUEST 0x01\r
+\r
+ /** DHCP operation constant, indicating a reply from a DHCP server to a host */\r
+ #define DHCP_OP_BOOTREPLY 0x02\r
+ \r
+ /** Hardware type constant, indicating Ethernet as a carrier */\r
+ #define DHCP_HTYPE_ETHERNET 0x01\r
+ \r
+ /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP) */\r
+ #define DHCP_MAGIC_COOKIE 0x63825363\r
+ \r
+ /** DHCP option list entry header, indicating that a subnet mask will follow */\r
+ #define DHCP_OPTION_SUBNETMASK 1\r
+\r
+ /** DHCP option list entry header, indicating that the DHCP message type constant will follow */\r
+ #define DHCP_OPTION_MESSAGETYPE 53\r
+\r
+ /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow */\r
+ #define DHCP_OPTION_DHCPSERVER 54\r
+\r
+ /** DHCP option list entry header, used to pad out option data */\r
+ #define DHCP_OPTION_PAD 0\r
+\r
+ /** DHCP option list entry header, indicating the end of option data */\r
+ #define DHCP_OPTION_END 255\r
+ \r
+ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address */\r
+ #define DHCP_MESSAGETYPE_DISCOVER 1\r
+\r
+ /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address */\r
+ #define DHCP_MESSAGETYPE_OFFER 2\r
+\r
+ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address */\r
+ #define DHCP_MESSAGETYPE_REQUEST 3\r
+\r
+ /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease */\r
+ #define DHCP_MESSAGETYPE_DECLINE 4\r
+\r
+ /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request */\r
+ #define DHCP_MESSAGETYPE_ACK 5\r
+\r
+ /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request */\r
+ #define DHCP_MESSAGETYPE_NACK 6\r
+\r
+ /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address */\r
+ #define DHCP_MESSAGETYPE_RELEASE 7\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a DHCP packet inside an Ethernet frame. */\r
+ typedef struct\r
+ {\r
+ uint8_t Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */\r
+ uint8_t HardwareType; /**< Hardware carrier type constant */\r
+ uint8_t HardwareAddressLength; /**< Length in bytes of a hardware (MAC) address on the network */\r
+ uint8_t Hops; /**< Number of hops required to reach the server, unused */\r
+\r
+ uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */\r
+\r
+ uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */\r
+ uint16_t Flags; /**< BOOTP packet flags */\r
+ \r
+ IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */\r
+ IP_Address_t YourIP; /**< Client IP address */\r
+ IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ \r
+ uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */\r
+ uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+ \r
+ uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */\r
+ } DHCP_Header_t;\r
+\r
+ /* Function Prototypes: */\r
+ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet\r
+ * frames sent and received, deferring the processing of subpacket protocols to the appropriate\r
+ * protocol handlers, such as DHCP or ARP.\r
+ */\r
+ \r
+#include "Ethernet.h"\r
+\r
+/* Global Variables: */\r
+/** Ethernet Frame buffer structure, to hold the incoming Ethernet frame from the host. */\r
+Ethernet_Frame_Info_t FrameIN;\r
+\r
+/** Ethernet Frame buffer structure, to hold the outgoing Ethernet frame to the host. */\r
+Ethernet_Frame_Info_t FrameOUT;\r
+\r
+/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
+const MAC_Address_t ServerMACAddress = {SERVER_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */\r
+const IP_Address_t ServerIPAddress = {SERVER_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */\r
+const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */\r
+const IP_Address_t BroadcastIPAddress = {BROADCAST_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */\r
+const IP_Address_t ClientIPAddress = {CLIENT_IP_ADDRESS};\r
+\r
+\r
+/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
+ * frame buffer if the sub protocol handlers create a valid response.\r
+ */\r
+void Ethernet_ProcessPacket(void)\r
+{\r
+ DecodeEthernetFrameHeader(FrameIN.FrameData);\r
+\r
+ /* Cast the incoming Ethernet frame to the Ethernet header type */\r
+ Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN.FrameData;\r
+ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData;\r
+ \r
+ int16_t RetSize = NO_RESPONSE;\r
+ \r
+ /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
+ if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
+ MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) &&\r
+ (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE))\r
+ {\r
+ /* Process the packet depending on its protocol */\r
+ switch (SwapEndian_16(FrameINHeader->EtherType))\r
+ {\r
+ case ETHERTYPE_ARP:\r
+ RetSize = ARP_ProcessARPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+ &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+ break; \r
+ case ETHERTYPE_IPV4:\r
+ RetSize = IP_ProcessIPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+ &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+ break;\r
+ }\r
+ \r
+ /* Protocol processing routine has filled a response, complete the ethernet frame header */\r
+ if (RetSize > 0)\r
+ {\r
+ /* Fill out the response Ethernet frame header */\r
+ FrameOUTHeader->Source = ServerMACAddress;\r
+ FrameOUTHeader->Destination = FrameINHeader->Source;\r
+ FrameOUTHeader->EtherType = FrameINHeader->EtherType;\r
+ \r
+ /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+ FrameOUT.FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
+ FrameOUT.FrameInBuffer = true;\r
+ }\r
+ }\r
+\r
+ /* Check if the packet was processed */\r
+ if (RetSize != NO_PROCESS)\r
+ {\r
+ /* Clear the frame buffer */\r
+ FrameIN.FrameInBuffer = false;\r
+ }\r
+}\r
+\r
+/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's\r
+ * compliment of each word, complimented.\r
+ *\r
+ * \param Data Pointer to the packet buffer data whose checksum must be calculated\r
+ * \param Bytes Number of bytes in the data buffer to process\r
+ *\r
+ * \return A 16-bit Ethernet checksum value\r
+ */\r
+uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes)\r
+{\r
+ uint16_t* Words = (uint16_t*)Data;\r
+ uint32_t Checksum = 0;\r
+\r
+ for (uint8_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)\r
+ Checksum += Words[CurrWord];\r
+ \r
+ while (Checksum & 0xFFFF0000)\r
+ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+ \r
+ return ~Checksum;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Ethernet.c.\r
+ */\r
+ \r
+#ifndef _ETHERNET_H_\r
+#define _ETHERNET_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+\r
+ #include "EthernetProtocols.h"\r
+ #include "ProtocolDecoders.h"\r
+ #include "ICMP.h"\r
+ #include "TCP.h"\r
+ #include "UDP.h"\r
+ #include "DHCP.h"\r
+ #include "ARP.h"\r
+ #include "IP.h"\r
+ \r
+ /* Macros: */\r
+ /** Physical MAC address of the virtual server on the network */\r
+ #define SERVER_MAC_ADDRESS {0x00, 0x01, 0x00, 0x01, 0x00, 0x01} \r
+\r
+ /** Physical MAC address of the network broadcast address */\r
+ #define BROADCAST_MAC_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
+ \r
+ /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
+ * \r
+ * \param MAC1 First MAC address\r
+ * \param MAC2 Second MAC address\r
+ *\r
+ * \return True if the addresses match, false otherwise\r
+ */\r
+ #define MAC_COMPARE(MAC1, MAC2) (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
+\r
+ /** Maximum size of an incoming or outgoing Ethernet frame in bytes */\r
+ #define ETHERNET_FRAME_SIZE_MAX 1500\r
+ \r
+ /** Minimum size of an Ethernet packet in bytes, to conform to the Ethernet V2 packet standard */\r
+ #define ETHERNET_VER2_MINSIZE 0x0600\r
+ \r
+ /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
+ #define NO_RESPONSE 0 \r
+\r
+ /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
+ #define NO_PROCESS -1\r
+\r
+ /* Type Defines: */\r
+ /** Type define for an Ethernet frame buffer. */\r
+ typedef struct\r
+ {\r
+ uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents */\r
+ uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer */\r
+ bool FrameInBuffer; /**< Indicates if a frame is currently stored in the buffer */\r
+ } Ethernet_Frame_Info_t;\r
+\r
+ /** Type define for an Ethernet frame header */\r
+ typedef struct\r
+ {\r
+ MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
+ MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
+ \r
+ union\r
+ {\r
+ uint16_t EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
+ uint16_t Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
+ };\r
+ } Ethernet_Frame_Header_t;\r
+ \r
+ /* External Variables: */\r
+ extern Ethernet_Frame_Info_t FrameIN;\r
+ extern Ethernet_Frame_Info_t FrameOUT;\r
+\r
+ extern const MAC_Address_t ServerMACAddress;\r
+ extern const IP_Address_t ServerIPAddress;\r
+ extern const MAC_Address_t BroadcastMACAddress;\r
+ extern const IP_Address_t BroadcastIPAddress;\r
+ extern const IP_Address_t ClientIPAddress;\r
+ \r
+ /* Function Prototypes: */\r
+ void Ethernet_ProcessPacket(void);\r
+ uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * General Ethernet protocol constants and type defines, for use by\r
+ * all network protocol portions of the TCP/IP stack.\r
+ */\r
+\r
+#ifndef _ETHERNET_PROTOCOLS_H_\r
+#define _ETHERNET_PROTOCOLS_H_\r
+\r
+ /* Macros: */\r
+ #define ETHERTYPE_IPV4 0x0800\r
+ #define ETHERTYPE_ARP 0x0806\r
+ #define ETHERTYPE_RARP 0x8035\r
+ #define ETHERTYPE_APPLETALK 0x809b\r
+ #define ETHERTYPE_APPLETALKARP 0x80f3\r
+ #define ETHERTYPE_IEEE8021Q 0x8100\r
+ #define ETHERTYPE_NOVELLIPX 0x8137\r
+ #define ETHERTYPE_NOVELL 0x8138\r
+ #define ETHERTYPE_IPV6 0x86DD\r
+ #define ETHERTYPE_COBRANET 0x8819\r
+ #define ETHERTYPE_PROVIDERBRIDGING 0x88a8\r
+ #define ETHERTYPE_MPLSUNICAST 0x8847\r
+ #define ETHERTYPE_MPLSMULTICAST 0x8848\r
+ #define ETHERTYPE_PPPoEDISCOVERY 0x8863\r
+ #define ETHERTYPE_PPPoESESSION 0x8864\r
+ #define ETHERTYPE_EAPOVERLAN 0x888E\r
+ #define ETHERTYPE_HYPERSCSI 0x889A\r
+ #define ETHERTYPE_ATAOVERETHERNET 0x88A2\r
+ #define ETHERTYPE_ETHERCAT 0x88A4\r
+ #define ETHERTYPE_SERCOSIII 0x88CD\r
+ #define ETHERTYPE_CESoE 0x88D8\r
+ #define ETHERTYPE_MACSECURITY 0x88E5\r
+ #define ETHERTYPE_FIBRECHANNEL 0x8906\r
+ #define ETHERTYPE_QINQ 0x9100\r
+ #define ETHERTYPE_VLLT 0xCAFE\r
+ \r
+ #define PROTOCOL_ICMP 1\r
+ #define PROTOCOL_IGMP 2\r
+ #define PROTOCOL_TCP 6\r
+ #define PROTOCOL_UDP 17\r
+ #define PROTOCOL_OSPF 89\r
+ #define PROTOCOL_SCTP 132\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a physical MAC address of a device on a network */\r
+ typedef struct\r
+ {\r
+ uint8_t Octets[6]; /**< Individual bytes of a MAC address */\r
+ } MAC_Address_t;\r
+ \r
+ /** Type define for a protocol IP address of a device on a network */\r
+ typedef struct\r
+ {\r
+ uint8_t Octets[4]; /**< Individual bytes of an IP address */\r
+ } IP_Address_t;\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles\r
+ * Echo requests from the host, to indicate a successful network connection between the host\r
+ * and the virtual server.\r
+ */\r
+ \r
+#include "ICMP.h"\r
+\r
+/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if the host is issuing a ICMP ECHO request.\r
+ *\r
+ * \param InDataStart Pointer to the start of the incoming packet's ICMP header\r
+ * \param OutDataStart Pointer to the start of the outgoing packet's ICMP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ICMP_ProcessICMPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+ ICMP_Header_t* ICMPHeaderIN = (ICMP_Header_t*)InDataStart;\r
+ ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart;\r
+\r
+ DecodeICMPHeader(InDataStart);\r
+\r
+ /* Determine if the ICMP packet is an echo request (ping) */\r
+ if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST)\r
+ {\r
+ /* Fill out the ICMP response packet */\r
+ ICMPHeaderOUT->Type = ICMP_TYPE_ECHOREPLY;\r
+ ICMPHeaderOUT->Code = 0;\r
+ ICMPHeaderOUT->Checksum = 0;\r
+ ICMPHeaderOUT->Id = ICMPHeaderIN->Id;\r
+ ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;\r
+ \r
+ uint16_t DataSize = FrameIN.FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN.FrameData));\r
+ \r
+ /* Copy the remaining payload to the response - echo requests should echo back any sent data */\r
+ memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],\r
+ &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],\r
+ DataSize);\r
+\r
+ ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));\r
+\r
+ /* Return the size of the response so far */\r
+ return (DataSize + sizeof(ICMP_Header_t));\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for ICMP.c.\r
+ */\r
+\r
+#ifndef _ICMP_H_\r
+#define _ICMP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** ICMP message type constant, indicating an ICMP ECHO Reply message */\r
+ #define ICMP_TYPE_ECHOREPLY 0\r
+\r
+ /** ICMP message type constant, indicating a packet destination is unreachable */\r
+ #define ICMP_TYPE_DESTINATIONUNREACHABLE 3\r
+ \r
+ /** ICMP message type constant, indicating an ICMP Source Quench message */\r
+ #define ICMP_TYPE_SOURCEQUENCH 4\r
+\r
+ /** ICMP message type constant, indicating an ICMP Redirect message */\r
+ #define ICMP_TYPE_REDIRECTMESSAGE 5\r
+\r
+ /** ICMP message type constant, indicating an ICMP ECHO Request message */\r
+ #define ICMP_TYPE_ECHOREQUEST 8\r
+\r
+ /** ICMP message type constant, indicating an ICMP Time Exceeded message */\r
+ #define ICMP_TYPE_TIMEEXCEEDED 11\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for an ICMP message header. */\r
+ typedef struct\r
+ {\r
+ uint8_t Type; /**< ICMP message type, a ICMP_TYPE_* constant */\r
+ uint8_t Code; /**< ICMP message code, indicating the message value */\r
+ uint16_t Checksum; /**< Ethernet checksum of the ICMP message */\r
+ uint16_t Id; /**< Id of the ICMP message */\r
+ uint16_t Sequence; /**< Sequence number of the ICMP message, to link together message responses */\r
+ } ICMP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t ICMP_ProcessICMPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the\r
+ * host which typically encapsulate other protocols such as ICMP, UDP and TCP.\r
+ */\r
+ \r
+#include "IP.h"\r
+\r
+/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if one is created by a subprotocol handler.\r
+ *\r
+ * \param InDataStart Pointer to the start of the incoming packet's IP header\r
+ * \param OutDataStart Pointer to the start of the outgoing packet's IP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ * response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ * next Ethernet packet handler iteration\r
+ */\r
+int16_t IP_ProcessIPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+ DecodeIPHeader(InDataStart);\r
+\r
+ IP_Header_t* IPHeaderIN = (IP_Header_t*)InDataStart;\r
+ IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart;\r
+\r
+ /* Header length is specified in number of longs in the packet header, convert to bytes */\r
+ uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+\r
+ int16_t RetSize = NO_RESPONSE;\r
+\r
+ /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */\r
+ if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) &&\r
+ !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress)))\r
+ {\r
+ return NO_RESPONSE;\r
+ }\r
+ \r
+ /* Pass off the IP payload to the appropriate protocol processing routine */\r
+ switch (IPHeaderIN->Protocol)\r
+ {\r
+ case PROTOCOL_ICMP:\r
+ RetSize = ICMP_ProcessICMPPacket(&((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);\r
+ break;\r
+ case PROTOCOL_TCP:\r
+ RetSize = TCP_ProcessTCPPacket(InDataStart,\r
+ &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); \r
+ break;\r
+ case PROTOCOL_UDP:\r
+ RetSize = UDP_ProcessUDPPacket(InDataStart,\r
+ &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); \r
+ break;\r
+ }\r
+ \r
+ /* Check to see if the protocol processing routine has filled out a response */\r
+ if (RetSize > 0)\r
+ {\r
+ /* Fill out the response IP packet header */\r
+ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + RetSize);\r
+ IPHeaderOUT->TypeOfService = 0;\r
+ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+ IPHeaderOUT->Version = 4;\r
+ IPHeaderOUT->Flags = 0;\r
+ IPHeaderOUT->FragmentOffset = 0;\r
+ IPHeaderOUT->Identification = 0;\r
+ IPHeaderOUT->HeaderChecksum = 0;\r
+ IPHeaderOUT->Protocol = IPHeaderIN->Protocol;\r
+ IPHeaderOUT->TTL = DEFAULT_TTL;\r
+ IPHeaderOUT->SourceAddress = IPHeaderIN->DestinationAddress;\r
+ IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;\r
+ \r
+ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+ \r
+ /* Return the size of the response so far */\r
+ return (sizeof(IP_Header_t) + RetSize);\r
+ }\r
+ \r
+ return RetSize;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for IP.c.\r
+ */\r
+ \r
+#ifndef _IP_H_\r
+#define _IP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <string.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** Protocol IP address of the host (client) machine, once assigned by DHCP */\r
+ #define CLIENT_IP_ADDRESS { 10, 0, 0, 1}\r
+\r
+ /** Protocol IP address of the virtual server machine */\r
+ #define SERVER_IP_ADDRESS { 10, 0, 0, 2}\r
+\r
+ /** Protocol IP address of the broadcast address */\r
+ #define BROADCAST_IP_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF}\r
+\r
+ /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination is reached */\r
+ #define DEFAULT_TTL 128\r
+ \r
+ /** Performs a comparison between two IP addresses, indicating if they are identical.\r
+ * \r
+ * \param IP1 First IP address\r
+ * \param IP2 Second IP address\r
+ *\r
+ * \return True if the addresses match, false otherwise\r
+ */\r
+ #define IP_COMPARE(IP1, IP2) (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)\r
+ \r
+ /* Type Defines: */\r
+ /** Type define of an IP packet header. */\r
+ typedef struct\r
+ {\r
+ unsigned char HeaderLength : 4; /**< Total length of the packet header, in 4-byte blocks */\r
+ unsigned char Version : 4; /**< IP protocol version */\r
+ uint8_t TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */\r
+ uint16_t TotalLength; /**< Total length of the IP packet, in bytes */\r
+\r
+ uint16_t Identification; /**< Identification value for identifying fragmented packets */\r
+ unsigned int FragmentOffset : 13; /**< Offset of this IP fragment */\r
+ unsigned int Flags : 3; /**< Fragment flags, to indicate if a packet is fragmented */\r
+\r
+ uint8_t TTL; /**< Maximum allowable number of hops to reach the packet destination */\r
+ uint8_t Protocol; /**< Encapsulated protocol type */\r
+ uint16_t HeaderChecksum; /**< Ethernet checksum of the IP header */\r
+ \r
+ IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */\r
+ IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */\r
+ } IP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t IP_ProcessIPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines\r
+ accepts a header to the appropriate protocol and prints out pertinent information\r
+ on the packet through the serial port.\r
+ \r
+ To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}\r
+ in the project makefile, and pass it to the compiler using the -D switch.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes.\r
+ * Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human\r
+ * readable format.\r
+ *\r
+ * Note that the USART is a slow transmission medium, and will slow down packet processing considerably.\r
+ * Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile\r
+ * and passing it to the compiler via the -D switch.\r
+ */\r
+ \r
+#include "ProtocolDecoders.h"\r
+\r
+/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an Ethernet frame header\r
+ */\r
+void DecodeEthernetFrameHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_ETHERNET)\r
+ Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;\r
+ \r
+ printf_P(PSTR("\r\n"));\r
+ \r
+ printf_P(PSTR(" ETHERNET\r\n"));\r
+ printf_P(PSTR(" + Frame Size: %u\r\n"), FrameIN.FrameLength);\r
+\r
+ if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) &&\r
+ !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress)))\r
+ {\r
+ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
+ return;\r
+ }\r
+\r
+ printf_P(PSTR(" + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0],\r
+ FrameHeader->Source.Octets[1],\r
+ FrameHeader->Source.Octets[2],\r
+ FrameHeader->Source.Octets[3],\r
+ FrameHeader->Source.Octets[4],\r
+ FrameHeader->Source.Octets[5]);\r
+\r
+ printf_P(PSTR(" + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Destination.Octets[0],\r
+ FrameHeader->Destination.Octets[1],\r
+ FrameHeader->Destination.Octets[2],\r
+ FrameHeader->Destination.Octets[3],\r
+ FrameHeader->Destination.Octets[4],\r
+ FrameHeader->Destination.Octets[5]);\r
+\r
+ if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)\r
+ printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));\r
+ else\r
+ printf_P(PSTR(" + Protocol: UNKNOWN E1\r\n"));\r
+ #endif\r
+}\r
+\r
+/** Decodes an ARP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an ARP packet header\r
+ */\r
+void DecodeARPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_ARP)\r
+ ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart; \r
+\r
+ printf_P(PSTR(" \\\r\n ARP\r\n"));\r
+\r
+ if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) &&\r
+ !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))\r
+ {\r
+ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
+ return; \r
+ }\r
+\r
+ printf_P(PSTR(" + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));\r
+ printf_P(PSTR(" + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));\r
+ \r
+ if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)\r
+ {\r
+ printf_P(PSTR(" + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],\r
+ ARPHeader->SHA.Octets[1],\r
+ ARPHeader->SHA.Octets[2],\r
+ ARPHeader->SHA.Octets[3],\r
+ ARPHeader->SHA.Octets[4],\r
+ ARPHeader->SHA.Octets[5]);\r
+\r
+ printf_P(PSTR(" + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0],\r
+ ARPHeader->SPA.Octets[1],\r
+ ARPHeader->SPA.Octets[2],\r
+ ARPHeader->SPA.Octets[3]);\r
+\r
+ printf_P(PSTR(" + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0],\r
+ ARPHeader->THA.Octets[1],\r
+ ARPHeader->THA.Octets[2],\r
+ ARPHeader->THA.Octets[3],\r
+ ARPHeader->THA.Octets[4],\r
+ ARPHeader->THA.Octets[5]);\r
+\r
+ printf_P(PSTR(" + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0],\r
+ ARPHeader->TPA.Octets[1],\r
+ ARPHeader->TPA.Octets[2],\r
+ ARPHeader->TPA.Octets[3]);\r
+ }\r
+ #endif\r
+}\r
+\r
+/** Decodes an IP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an IP packet header\r
+ */\r
+void DecodeIPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_IP)\r
+ IP_Header_t* IPHeader = (IP_Header_t*)InDataStart;\r
+\r
+ uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t));\r
+\r
+ printf_P(PSTR(" \\\r\n IP\r\n"));\r
+\r
+ if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress)))\r
+ {\r
+ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
+ return;\r
+ }\r
+\r
+ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+ printf_P(PSTR(" + Packet Version: %u\r\n"), IPHeader->Version);\r
+ printf_P(PSTR(" + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));\r
+ \r
+ printf_P(PSTR(" + Protocol: %u\r\n"), IPHeader->Protocol);\r
+ printf_P(PSTR(" + TTL: %u\r\n"), IPHeader->TTL);\r
+ \r
+ printf_P(PSTR(" + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],\r
+ IPHeader->SourceAddress.Octets[1],\r
+ IPHeader->SourceAddress.Octets[2],\r
+ IPHeader->SourceAddress.Octets[3]); \r
+\r
+ printf_P(PSTR(" + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],\r
+ IPHeader->DestinationAddress.Octets[1],\r
+ IPHeader->DestinationAddress.Octets[2],\r
+ IPHeader->DestinationAddress.Octets[3]);\r
+ #endif\r
+}\r
+\r
+/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of an ICMP packet header\r
+ */\r
+void DecodeICMPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_ICMP)\r
+ ICMP_Header_t* ICMPHeader = (ICMP_Header_t*)InDataStart;\r
+\r
+ printf_P(PSTR(" \\\r\n ICMP\r\n"));\r
+\r
+ printf_P(PSTR(" + Type: %u\r\n"), ICMPHeader->Type);\r
+ printf_P(PSTR(" + Code: %u\r\n"), ICMPHeader->Code);\r
+ #endif\r
+}\r
+\r
+/** Decodes a TCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of a TCP packet header\r
+ */\r
+void DecodeTCPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_TCP)\r
+ TCP_Header_t* TCPHeader = (TCP_Header_t*)InDataStart;\r
+\r
+ uint16_t HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t));\r
+\r
+ printf_P(PSTR(" \\\r\n TCP\r\n"));\r
+\r
+ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+\r
+ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort));\r
+ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort));\r
+\r
+ printf_P(PSTR(" + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));\r
+ printf_P(PSTR(" + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));\r
+ \r
+ printf_P(PSTR(" + Flags: 0x%02X\r\n"), TCPHeader->Flags);\r
+ \r
+ if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)\r
+ printf_P(PSTR(" + NOT LISTENING ON DESTINATION PORT\r\n"));\r
+ #endif\r
+}\r
+\r
+/** Decodes an UDP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of a UDP packet header\r
+ */\r
+void DecodeUDPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_UDP)\r
+ UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart;\r
+\r
+ printf_P(PSTR(" \\\r\n UDP\r\n"));\r
+\r
+ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort));\r
+ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort));\r
+\r
+ printf_P(PSTR(" + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length));\r
+ #endif\r
+}\r
+\r
+/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ * \param InDataStart Pointer to the start of a DHCP packet header\r
+ */\r
+void DecodeDHCPHeader(void* InDataStart)\r
+{\r
+ #if !defined(NO_DECODE_DHCP)\r
+ uint8_t* DHCPOptions = (InDataStart + sizeof(DHCP_Header_t));\r
+\r
+ printf_P(PSTR(" \\\r\n DHCP\r\n"));\r
+\r
+ while (DHCPOptions[0] != DHCP_OPTION_END)\r
+ {\r
+ if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE)\r
+ {\r
+ switch (DHCPOptions[2])\r
+ {\r
+ case DHCP_MESSAGETYPE_DISCOVER:\r
+ printf_P(PSTR(" + DISCOVER\r\n"));\r
+ break;\r
+ case DHCP_MESSAGETYPE_REQUEST:\r
+ printf_P(PSTR(" + REQUEST\r\n"));\r
+ break;\r
+ case DHCP_MESSAGETYPE_RELEASE:\r
+ printf_P(PSTR(" + RELEASE\r\n"));\r
+ break;\r
+ case DHCP_MESSAGETYPE_DECLINE:\r
+ printf_P(PSTR(" + DECLINE\r\n"));\r
+ break;\r
+ }\r
+ }\r
+ \r
+ DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));\r
+ }\r
+\r
+ #endif\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for ProtocolDecoders.c.\r
+ */\r
+\r
+#ifndef _PROTOCOL_DECODERS_H_\r
+#define _PROTOCOL_DECODERS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ \r
+ #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ \r
+ /* Function Prototypes: */\r
+ void DecodeEthernetFrameHeader(void* InDataStart);\r
+ void DecodeARPHeader(void* InDataStart);\r
+ void DecodeIPHeader(void* InDataStart);\r
+ void DecodeICMPHeader(void* InDataStart);\r
+ void DecodeTCPHeader(void* InDataStart);\r
+ void DecodeUDPHeader(void* InDataStart);\r
+ void DecodeDHCPHeader(void* InDataStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * RNDIS command handler functions. This handles RNDIS commands according to\r
+ * the Microsoft RNDIS specification, creating a USB Ethernet network adapter.\r
+ */\r
+ \r
+#define INCLUDE_FROM_RNDIS_C\r
+#include "RNDIS.h"\r
+\r
+/* Global Variables: */\r
+/** Physical MAC address of the network adapter, which becomes the MAC address of the host for packets sent to the adapter. */\r
+static MAC_Address_t PROGMEM AdapterMACAddress = {ADAPTER_MAC_ADDRESS};\r
+\r
+/** Vendor description of the adapter. This is overridden by the INF file required to install the appropriate RNDIS drivers for\r
+ * the device, but may still be used by the OS in some circumstances.\r
+ */\r
+static char PROGMEM AdapterVendorDescription[] = "LUFA RNDIS Adapter";\r
+\r
+/** List of RNDIS OID commands supported by this adapter. */\r
+static const uint32_t PROGMEM AdapterSupportedOIDList[] =\r
+ {\r
+ OID_GEN_SUPPORTED_LIST,\r
+ OID_GEN_PHYSICAL_MEDIUM,\r
+ OID_GEN_HARDWARE_STATUS,\r
+ OID_GEN_MEDIA_SUPPORTED,\r
+ OID_GEN_MEDIA_IN_USE,\r
+ OID_GEN_MAXIMUM_FRAME_SIZE,\r
+ OID_GEN_MAXIMUM_TOTAL_SIZE,\r
+ OID_GEN_LINK_SPEED,\r
+ OID_GEN_TRANSMIT_BLOCK_SIZE,\r
+ OID_GEN_RECEIVE_BLOCK_SIZE,\r
+ OID_GEN_VENDOR_ID,\r
+ OID_GEN_VENDOR_DESCRIPTION,\r
+ OID_GEN_CURRENT_PACKET_FILTER,\r
+ OID_GEN_MAXIMUM_TOTAL_SIZE,\r
+ OID_GEN_MEDIA_CONNECT_STATUS,\r
+ OID_GEN_XMIT_OK,\r
+ OID_GEN_RCV_OK,\r
+ OID_GEN_XMIT_ERROR,\r
+ OID_GEN_RCV_ERROR,\r
+ OID_GEN_RCV_NO_BUFFER,\r
+ OID_802_3_PERMANENT_ADDRESS,\r
+ OID_802_3_CURRENT_ADDRESS,\r
+ OID_802_3_MULTICAST_LIST,\r
+ OID_802_3_MAXIMUM_LIST_SIZE,\r
+ OID_802_3_RCV_ERROR_ALIGNMENT,\r
+ OID_802_3_XMIT_ONE_COLLISION,\r
+ OID_802_3_XMIT_MORE_COLLISIONS,\r
+ };\r
+\r
+/** Buffer for RNDIS messages (as distinct from Ethernet frames sent through the adapter. This must be big enough to hold the entire\r
+ * Supported OID list, plus the response header. The buffer is half-duplex, and is written to as it is read to save on SRAM - for this\r
+ * reason, care must be taken when constructing RNDIS responses that unread data is not overwritten when writing in responses.\r
+ */\r
+uint8_t RNDISMessageBuffer[sizeof(AdapterSupportedOIDList) + sizeof(RNDIS_QUERY_CMPLT_t)];\r
+\r
+/** Pointer to the RNDIS message header at the top of the RNDIS message buffer, for convenience. */\r
+RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISMessageBuffer;\r
+\r
+/** Indicates if a RNDIS message response is ready to be sent back to the host. */\r
+bool ResponseReady = false;\r
+\r
+/** Current RNDIS adapter state, a value from the RNDIS_States_t enum. */\r
+uint8_t CurrRNDISState = RNDIS_Uninitialized;\r
+\r
+/** Current Ethernet packet filter mask. This is non-zero when the adapter is initialized, or zero when disabled. */\r
+uint32_t CurrPacketFilter = 0; \r
+\r
+\r
+/** Processes the RNDIS message received by the host and stored in the RNDISMessageBuffer global buffer. If a response is\r
+ * created, the ResponseReady global is updated so that the response is written back to the host upon request.\r
+ */\r
+void ProcessRNDISControlMessage(void)\r
+{\r
+ /* Note: Only a single buffer is used for both the received message and its response to save SRAM. Because of\r
+ this, response bytes should be filled in order so that they do not clobber unread data in the buffer. */\r
+\r
+ switch (MessageHeader->MessageType)\r
+ {\r
+ case REMOTE_NDIS_INITIALIZE_MSG:\r
+ /* Initialize the adapter - return information about the supported RNDIS version and buffer sizes */\r
+\r
+ ResponseReady = true;\r
+ \r
+ RNDIS_INITIALIZE_MSG_t* INITIALIZE_Message = (RNDIS_INITIALIZE_MSG_t*)&RNDISMessageBuffer;\r
+ RNDIS_INITIALIZE_CMPLT_t* INITIALIZE_Response = (RNDIS_INITIALIZE_CMPLT_t*)&RNDISMessageBuffer;\r
+ \r
+ INITIALIZE_Response->MessageType = REMOTE_NDIS_INITIALIZE_CMPLT;\r
+ INITIALIZE_Response->MessageLength = sizeof(RNDIS_INITIALIZE_CMPLT_t);\r
+ INITIALIZE_Response->RequestId = INITIALIZE_Message->RequestId;\r
+ INITIALIZE_Response->Status = REMOTE_NDIS_STATUS_SUCCESS;\r
+ \r
+ INITIALIZE_Response->MajorVersion = REMOTE_NDIS_VERSION_MAJOR;\r
+ INITIALIZE_Response->MinorVersion = REMOTE_NDIS_VERSION_MINOR; \r
+ INITIALIZE_Response->DeviceFlags = REMOTE_NDIS_DF_CONNECTIONLESS;\r
+ INITIALIZE_Response->Medium = REMOTE_NDIS_MEDIUM_802_3;\r
+ INITIALIZE_Response->MaxPacketsPerTransfer = 1;\r
+ INITIALIZE_Response->MaxTransferSize = (sizeof(RNDIS_PACKET_MSG_t) + ETHERNET_FRAME_SIZE_MAX);\r
+ INITIALIZE_Response->PacketAlignmentFactor = 0;\r
+ INITIALIZE_Response->AFListOffset = 0;\r
+ INITIALIZE_Response->AFListSize = 0;\r
+ \r
+ CurrRNDISState = RNDIS_Initialized;\r
+ \r
+ break;\r
+ case REMOTE_NDIS_HALT_MSG:\r
+ /* Halt the adapter, reset the adapter state - note that no response should be returned when completed */\r
+\r
+ ResponseReady = false;\r
+ MessageHeader->MessageLength = 0;\r
+\r
+ CurrRNDISState = RNDIS_Uninitialized;\r
+\r
+ break;\r
+ case REMOTE_NDIS_QUERY_MSG:\r
+ /* Request for information about a parameter about the adapter, specified as an OID token */\r
+\r
+ ResponseReady = true;\r
+ \r
+ RNDIS_QUERY_MSG_t* QUERY_Message = (RNDIS_QUERY_MSG_t*)&RNDISMessageBuffer;\r
+ RNDIS_QUERY_CMPLT_t* QUERY_Response = (RNDIS_QUERY_CMPLT_t*)&RNDISMessageBuffer;\r
+ uint32_t Query_Oid = QUERY_Message->Oid;\r
+ \r
+ void* QueryData = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
+ QUERY_Message->InformationBufferOffset];\r
+ void* ResponseData = &RNDISMessageBuffer[sizeof(RNDIS_QUERY_CMPLT_t)]; \r
+ uint16_t ResponseSize;\r
+\r
+ QUERY_Response->MessageType = REMOTE_NDIS_QUERY_CMPLT;\r
+ QUERY_Response->MessageLength = sizeof(RNDIS_QUERY_CMPLT_t);\r
+ \r
+ if (ProcessNDISQuery(Query_Oid, QueryData, QUERY_Message->InformationBufferLength,\r
+ ResponseData, &ResponseSize))\r
+ {\r
+ QUERY_Response->Status = REMOTE_NDIS_STATUS_SUCCESS;\r
+ QUERY_Response->MessageLength += ResponseSize;\r
+ \r
+ QUERY_Response->InformationBufferLength = ResponseSize;\r
+ QUERY_Response->InformationBufferOffset = (sizeof(RNDIS_QUERY_CMPLT_t) - sizeof(RNDIS_Message_Header_t));\r
+ }\r
+ else\r
+ { \r
+ QUERY_Response->Status = REMOTE_NDIS_STATUS_NOT_SUPPORTED;\r
+\r
+ QUERY_Response->InformationBufferLength = 0;\r
+ QUERY_Response->InformationBufferOffset = 0;\r
+ }\r
+ \r
+ break;\r
+ case REMOTE_NDIS_SET_MSG:\r
+ /* Request to set a parameter of the adapter, specified as an OID token */\r
+ \r
+ ResponseReady = true;\r
+ \r
+ RNDIS_SET_MSG_t* SET_Message = (RNDIS_SET_MSG_t*)&RNDISMessageBuffer;\r
+ RNDIS_SET_CMPLT_t* SET_Response = (RNDIS_SET_CMPLT_t*)&RNDISMessageBuffer;\r
+ uint32_t SET_Oid = SET_Message->Oid;\r
+\r
+ SET_Response->MessageType = REMOTE_NDIS_SET_CMPLT;\r
+ SET_Response->MessageLength = sizeof(RNDIS_SET_CMPLT_t);\r
+ SET_Response->RequestId = SET_Message->RequestId;\r
+\r
+ void* SetData = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
+ SET_Message->InformationBufferOffset];\r
+ \r
+ if (ProcessNDISSet(SET_Oid, SetData, SET_Message->InformationBufferLength))\r
+ SET_Response->Status = REMOTE_NDIS_STATUS_SUCCESS;\r
+ else\r
+ SET_Response->Status = REMOTE_NDIS_STATUS_NOT_SUPPORTED;\r
+\r
+ break;\r
+ case REMOTE_NDIS_RESET_MSG:\r
+ /* Soft reset the adapter */\r
+ \r
+ ResponseReady = true;\r
+ \r
+ RNDIS_RESET_CMPLT_t* RESET_Response = (RNDIS_RESET_CMPLT_t*)&RNDISMessageBuffer;\r
+\r
+ RESET_Response->MessageType = REMOTE_NDIS_RESET_CMPLT;\r
+ RESET_Response->MessageLength = sizeof(RNDIS_RESET_CMPLT_t);\r
+ RESET_Response->Status = REMOTE_NDIS_STATUS_SUCCESS;\r
+ RESET_Response->AddressingReset = 0;\r
+\r
+ break;\r
+ case REMOTE_NDIS_KEEPALIVE_MSG:\r
+ /* Keep alive message sent to the adapter every 5 seconds when idle to ensure it is still responding */\r
+ \r
+ ResponseReady = true;\r
+ \r
+ RNDIS_KEEPALIVE_MSG_t* KEEPALIVE_Message = (RNDIS_KEEPALIVE_MSG_t*)&RNDISMessageBuffer;\r
+ RNDIS_KEEPALIVE_CMPLT_t* KEEPALIVE_Response = (RNDIS_KEEPALIVE_CMPLT_t*)&RNDISMessageBuffer;\r
+\r
+ KEEPALIVE_Response->MessageType = REMOTE_NDIS_KEEPALIVE_CMPLT;\r
+ KEEPALIVE_Response->MessageLength = sizeof(RNDIS_KEEPALIVE_CMPLT_t);\r
+ KEEPALIVE_Response->RequestId = KEEPALIVE_Message->RequestId;\r
+ KEEPALIVE_Response->Status = REMOTE_NDIS_STATUS_SUCCESS;\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Processes RNDIS query commands, retrieving information from the adapter and reporting it back to the host. The requested\r
+ * parameter is given as an OID value.\r
+ *\r
+ * \param OId OId value of the parameter being queried\r
+ * \param QueryData Pointer to any extra query data being sent by the host to the device inside the RNDIS message buffer\r
+ * \param QuerySize Size in bytes of the extra query data being sent by the host\r
+ * \param ResponseData Pointer to the start of the query response inside the RNDIS message buffer\r
+ * \param ResponseSize Pointer to the size in bytes of the response data being sent to the host\r
+ *\r
+ * \return Boolean true if the query was handled, false otherwise\r
+ */\r
+static bool ProcessNDISQuery(uint32_t OId, void* QueryData, uint16_t QuerySize,\r
+ void* ResponseData, uint16_t* ResponseSize)\r
+{\r
+ /* Handler for REMOTE_NDIS_QUERY_MSG messages */\r
+\r
+ switch (OId)\r
+ {\r
+ case OID_GEN_SUPPORTED_LIST:\r
+ *ResponseSize = sizeof(AdapterSupportedOIDList);\r
+ \r
+ /* Copy the list of supported NDIS OID tokens to the response buffer */\r
+ memcpy_P(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList));\r
+ \r
+ return true;\r
+ case OID_GEN_PHYSICAL_MEDIUM:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate that the device is a true ethernet link */\r
+ *((uint32_t*)ResponseData) = 0;\r
+ \r
+ return true;\r
+ case OID_GEN_HARDWARE_STATUS:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Always indicate hardware ready */\r
+ *((uint32_t*)ResponseData) = NdisHardwareStatusReady;\r
+ \r
+ return true;\r
+ case OID_GEN_MEDIA_SUPPORTED:\r
+ case OID_GEN_MEDIA_IN_USE:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate 802.3 (Ethernet) supported by the adapter */\r
+ *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIUM_802_3;\r
+ \r
+ return true;\r
+ case OID_GEN_VENDOR_ID:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Vendor ID 0x0xFFFFFF is reserved for vendors who have not purchased a NDIS VID */\r
+ *((uint32_t*)ResponseData) = 0x00FFFFFF;\r
+ \r
+ return true;\r
+ case OID_GEN_MAXIMUM_FRAME_SIZE:\r
+ case OID_GEN_TRANSMIT_BLOCK_SIZE:\r
+ case OID_GEN_RECEIVE_BLOCK_SIZE:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate that the maximum frame size is the size of the ethernet frame buffer */\r
+ *((uint32_t*)ResponseData) = ETHERNET_FRAME_SIZE_MAX;\r
+ \r
+ return true;\r
+ case OID_GEN_VENDOR_DESCRIPTION:\r
+ *ResponseSize = sizeof(AdapterVendorDescription);\r
+ \r
+ /* Copy vendor description string to the response buffer */\r
+ memcpy_P(ResponseData, AdapterVendorDescription, sizeof(AdapterVendorDescription));\r
+ \r
+ return true;\r
+ case OID_GEN_MEDIA_CONNECT_STATUS:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Always indicate that the adapter is connected to a network */\r
+ *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIA_STATE_CONNECTED;\r
+ \r
+ return true;\r
+ case OID_GEN_LINK_SPEED:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate 10Mb/s link speed */\r
+ *((uint32_t*)ResponseData) = 100000;\r
+\r
+ return true;\r
+ case OID_802_3_PERMANENT_ADDRESS:\r
+ case OID_802_3_CURRENT_ADDRESS:\r
+ *ResponseSize = sizeof(MAC_Address_t);\r
+ \r
+ /* Copy over the fixed adapter MAC to the response buffer */\r
+ memcpy_P(ResponseData, &AdapterMACAddress, sizeof(MAC_Address_t));\r
+\r
+ return true;\r
+ case OID_802_3_MAXIMUM_LIST_SIZE:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate only one multicast address supported */\r
+ *((uint32_t*)ResponseData) = 1;\r
+ \r
+ return true;\r
+ case OID_GEN_CURRENT_PACKET_FILTER:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate the current packet filter mask */\r
+ *((uint32_t*)ResponseData) = CurrPacketFilter;\r
+ \r
+ return true; \r
+ case OID_GEN_XMIT_OK:\r
+ case OID_GEN_RCV_OK:\r
+ case OID_GEN_XMIT_ERROR:\r
+ case OID_GEN_RCV_ERROR:\r
+ case OID_GEN_RCV_NO_BUFFER:\r
+ case OID_802_3_RCV_ERROR_ALIGNMENT:\r
+ case OID_802_3_XMIT_ONE_COLLISION:\r
+ case OID_802_3_XMIT_MORE_COLLISIONS:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Unused statistic OIDs - always return 0 for each */\r
+ *((uint32_t*)ResponseData) = 0;\r
+ \r
+ return true;\r
+ case OID_GEN_MAXIMUM_TOTAL_SIZE:\r
+ *ResponseSize = sizeof(uint32_t);\r
+ \r
+ /* Indicate maximum overall buffer (Ethernet frame and RNDIS header) the adapter can handle */\r
+ *((uint32_t*)ResponseData) = (sizeof(RNDISMessageBuffer) + ETHERNET_FRAME_SIZE_MAX);\r
+ \r
+ return true;\r
+ default:\r
+ return false;\r
+ }\r
+}\r
+\r
+/** Processes RNDIS set commands, setting adapter parameters to values given by the host. The requested parameter is given \r
+ * as an OID value.\r
+ *\r
+ * \param OId OId value of the parameter being set\r
+ * \param SetData Pointer to the parameter value in the RNDIS message buffer\r
+ * \param SetSize Size in bytes of the parameter value being sent by the host\r
+ *\r
+ * \return Boolean true if the set was handled, false otherwise\r
+ */\r
+static bool ProcessNDISSet(uint32_t OId, void* SetData, uint16_t SetSize)\r
+{\r
+ /* Handler for REMOTE_NDIS_SET_MSG messages */\r
+\r
+ switch (OId)\r
+ {\r
+ case OID_GEN_CURRENT_PACKET_FILTER:\r
+ /* Save the packet filter mask in case the host queries it again later */\r
+ CurrPacketFilter = *((uint32_t*)SetData);\r
+ \r
+ /* Set the RNDIS state to initialized if the packet filter is non-zero */\r
+ CurrRNDISState = ((CurrPacketFilter) ? RNDIS_Data_Initialized : RNDIS_Data_Initialized);\r
+ \r
+ return true;\r
+ case OID_802_3_MULTICAST_LIST:\r
+ /* Do nothing - throw away the value from the host as it is unused */\r
+ \r
+ return true;\r
+ default:\r
+ return false;\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for RNDIS.c.\r
+ */\r
+\r
+#ifndef _RNDIS_H_\r
+#define _RNDIS_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>\r
+ \r
+ #include "RNDISEthernet.h"\r
+ #include "RNDISConstants.h"\r
+ #include "Ethernet.h"\r
+\r
+ /* Macros: */\r
+ /** Physical MAC Address of the USB network adapter */\r
+ #define ADAPTER_MAC_ADDRESS {0x02, 0x00, 0x02, 0x00, 0x02, 0x00}\r
+ \r
+ /** Implemented RNDIS Version Major */\r
+ #define REMOTE_NDIS_VERSION_MAJOR 0x01\r
+\r
+ /** Implemented RNDIS Version Minor */\r
+ #define REMOTE_NDIS_VERSION_MINOR 0x00\r
+ \r
+ /** RNDIS request to issue a host-to-device NDIS command */\r
+ #define REQ_SendEncapsulatedCommand 0x00\r
+\r
+ /** RNDIS request to issue a device-to-host NDIS response */\r
+ #define REQ_GetEncapsulatedResponse 0x01\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible NDIS adapter states. */\r
+ enum RNDIS_States_t\r
+ {\r
+ RNDIS_Uninitialized = 0, /**< Adapter currently uninitialized */\r
+ RNDIS_Initialized = 1, /**< Adapter currently initialized but not ready for data transfers */\r
+ RNDIS_Data_Initialized = 2, /**< Adapter currently initialized and ready for data transfers */\r
+ };\r
+\r
+ /** Enum for the NDIS hardware states */\r
+ enum NDIS_Hardware_Status_t\r
+ {\r
+ NdisHardwareStatusReady, /**< Hardware Ready to accept commands from the host */\r
+ NdisHardwareStatusInitializing, /**< Hardware busy initializing */\r
+ NdisHardwareStatusReset, /**< Hardware reset */\r
+ NdisHardwareStatusClosing, /**< Hardware currently closing */\r
+ NdisHardwareStatusNotReady /**< Hardware not ready to accept commands from the host */\r
+ };\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a RNDIS message header, sent before RNDIS messages */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType; /**< RNDIS message type, a REMOTE_NDIS_*_MSG constant */\r
+ uint32_t MessageLength; /**< Total length of the RNDIS message, in bytes */\r
+ } RNDIS_Message_Header_t;\r
+\r
+ /** Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t DataOffset;\r
+ uint32_t DataLength;\r
+ uint32_t OOBDataOffset;\r
+ uint32_t OOBDataLength;\r
+ uint32_t NumOOBDataElements;\r
+ uint32_t PerPacketInfoOffset;\r
+ uint32_t PerPacketInfoLength;\r
+ uint32_t VcHandle;\r
+ uint32_t Reserved;\r
+ } RNDIS_PACKET_MSG_t;\r
+ \r
+ /** Type define for a RNDIS Initialize command message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ \r
+ uint32_t MajorVersion;\r
+ uint32_t MinorVersion;\r
+ uint32_t MaxTransferSize;\r
+ } RNDIS_INITIALIZE_MSG_t;\r
+ \r
+ /** Type define for a RNDIS Initialize complete response message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ uint32_t Status;\r
+ \r
+ uint32_t MajorVersion;\r
+ uint32_t MinorVersion;\r
+ uint32_t DeviceFlags;\r
+ uint32_t Medium;\r
+ uint32_t MaxPacketsPerTransfer;\r
+ uint32_t MaxTransferSize;\r
+ uint32_t PacketAlignmentFactor;\r
+ uint32_t AFListOffset;\r
+ uint32_t AFListSize;\r
+ } RNDIS_INITIALIZE_CMPLT_t;\r
+ \r
+ /** Type define for a RNDIS Keepalive command message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ } RNDIS_KEEPALIVE_MSG_t;\r
+\r
+ /** Type define for a RNDIS Keepalive complete message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ uint32_t Status;\r
+ } RNDIS_KEEPALIVE_CMPLT_t;\r
+\r
+ /** Type define for a RNDIS Reset complete message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t Status;\r
+\r
+ uint32_t AddressingReset;\r
+ } RNDIS_RESET_CMPLT_t;\r
+ \r
+ /** Type define for a RNDIS Set command message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ \r
+ uint32_t Oid;\r
+ uint32_t InformationBufferLength;\r
+ uint32_t InformationBufferOffset;\r
+ uint32_t DeviceVcHandle;\r
+ } RNDIS_SET_MSG_t;\r
+\r
+ /** Type define for a RNDIS Set complete response message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ uint32_t Status;\r
+ } RNDIS_SET_CMPLT_t;\r
+ \r
+ /** Type define for a RNDIS Query command message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ \r
+ uint32_t Oid;\r
+ uint32_t InformationBufferLength;\r
+ uint32_t InformationBufferOffset;\r
+ uint32_t DeviceVcHandle;\r
+ } RNDIS_QUERY_MSG_t;\r
+ \r
+ /** Type define for a RNDIS Query complete response message */\r
+ typedef struct\r
+ {\r
+ uint32_t MessageType;\r
+ uint32_t MessageLength;\r
+ uint32_t RequestId;\r
+ uint32_t Status;\r
+ \r
+ uint32_t InformationBufferLength;\r
+ uint32_t InformationBufferOffset;\r
+ } RNDIS_QUERY_CMPLT_t;\r
+ \r
+ /* External Variables: */\r
+ extern uint8_t RNDISMessageBuffer[];\r
+ extern RNDIS_Message_Header_t* MessageHeader;\r
+ extern bool ResponseReady;\r
+ extern uint8_t CurrRNDISState;\r
+\r
+ /* Function Prototypes: */\r
+ void ProcessRNDISControlMessage(void);\r
+\r
+ #if defined(INCLUDE_FROM_RNDIS_C)\r
+ static bool ProcessNDISQuery(uint32_t OId, void* QueryData, uint16_t QuerySize,\r
+ void* ResponseData, uint16_t* ResponseSize);\r
+ static bool ProcessNDISSet(uint32_t OId, void* SetData, uint16_t SetSize); \r
+ #endif\r
+ \r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * RNDIS specification related constants. For more information on these\r
+ * constants, please refer to the Microsoft RNDIS specification.\r
+ */\r
+ \r
+#ifndef _RNDIS_CONSTANTS_H_\r
+#define _RNDIS_CONSTANTS_H_\r
+\r
+ /* Macros: */\r
+ #define REMOTE_NDIS_PACKET_MSG 0x00000001UL\r
+ #define REMOTE_NDIS_INITIALIZE_MSG 0x00000002UL\r
+ #define REMOTE_NDIS_HALT_MSG 0x00000003UL\r
+ #define REMOTE_NDIS_QUERY_MSG 0x00000004UL\r
+ #define REMOTE_NDIS_SET_MSG 0x00000005UL\r
+ #define REMOTE_NDIS_RESET_MSG 0x00000006UL\r
+ #define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007UL\r
+ #define REMOTE_NDIS_KEEPALIVE_MSG 0x00000008UL\r
+\r
+ #define REMOTE_NDIS_INITIALIZE_CMPLT 0x80000002UL\r
+ #define REMOTE_NDIS_QUERY_CMPLT 0x80000004UL\r
+ #define REMOTE_NDIS_SET_CMPLT 0x80000005UL\r
+ #define REMOTE_NDIS_RESET_CMPLT 0x80000006UL\r
+ #define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008UL\r
+ \r
+ #define REMOTE_NDIS_STATUS_SUCCESS 0x00000000UL\r
+ #define REMOTE_NDIS_STATUS_FAILURE 0xC0000001UL\r
+ #define REMOTE_NDIS_STATUS_INVALID_DATA 0xC0010015UL\r
+ #define REMOTE_NDIS_STATUS_NOT_SUPPORTED 0xC00000BBUL\r
+ #define REMOTE_NDIS_STATUS_MEDIA_CONNECT 0x4001000BUL\r
+ #define REMOTE_NDIS_STATUS_MEDIA_DISCONNECT 0x4001000CUL\r
+ \r
+ #define REMOTE_NDIS_MEDIA_STATE_CONNECTED 0x00000000UL\r
+ #define REMOTE_NDIS_MEDIA_STATE_DISCONNECTED 0x00000001UL\r
+ \r
+ #define REMOTE_NDIS_MEDIUM_802_3 0x00000000UL\r
+ \r
+ #define REMOTE_NDIS_DF_CONNECTIONLESS 0x00000001UL\r
+ #define REMOTE_NDIS_DF_CONNECTION_ORIENTED 0x00000002UL\r
+ \r
+ #define OID_GEN_SUPPORTED_LIST 0x00010101UL\r
+ #define OID_GEN_HARDWARE_STATUS 0x00010102UL\r
+ #define OID_GEN_MEDIA_SUPPORTED 0x00010103UL\r
+ #define OID_GEN_MEDIA_IN_USE 0x00010104UL\r
+ #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106UL\r
+ #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL\r
+ #define OID_GEN_LINK_SPEED 0x00010107UL\r
+ #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010AUL\r
+ #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010BUL\r
+ #define OID_GEN_VENDOR_ID 0x0001010CUL\r
+ #define OID_GEN_VENDOR_DESCRIPTION 0x0001010DUL\r
+ #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010EUL\r
+ #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL\r
+ #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114UL\r
+ #define OID_GEN_PHYSICAL_MEDIUM 0x00010202UL\r
+ #define OID_GEN_XMIT_OK 0x00020101UL\r
+ #define OID_GEN_RCV_OK 0x00020102UL\r
+ #define OID_GEN_XMIT_ERROR 0x00020103UL\r
+ #define OID_GEN_RCV_ERROR 0x00020104UL\r
+ #define OID_GEN_RCV_NO_BUFFER 0x00020105UL\r
+ #define OID_802_3_PERMANENT_ADDRESS 0x01010101UL\r
+ #define OID_802_3_CURRENT_ADDRESS 0x01010102UL\r
+ #define OID_802_3_MULTICAST_LIST 0x01010103UL\r
+ #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104UL\r
+ #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101UL\r
+ #define OID_802_3_XMIT_ONE_COLLISION 0x01020102UL\r
+ #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103UL\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission\r
+ * and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data\r
+ * delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.\r
+ */\r
+ \r
+#define INCLUDE_FROM_TCP_C\r
+#include "TCP.h"\r
+\r
+/* Global Variables: */\r
+/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are\r
+ * stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This\r
+ * allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired.\r
+ */\r
+TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active\r
+ * (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections\r
+ * not present in the array are closed.\r
+ */\r
+TCP_ConnectionState_t ConnectionStateTable[MAX_TCP_CONNECTIONS];\r
+\r
+\r
+/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application\r
+ * level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
+ * buffer for later transmission.\r
+ */\r
+TASK(TCP_Task)\r
+{\r
+ /* Task to hand off TCP packets to and from the listening applications. */\r
+\r
+ /* Run each application in sequence, to process incoming and generate outgoing packets */\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find the corresponding port entry in the port table */\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Run the application handler for the port */\r
+ if ((PortStateTable[PTableEntry].Port == ConnectionStateTable[CSTableEntry].Port) && \r
+ (PortStateTable[PTableEntry].State == TCP_Port_Open))\r
+ {\r
+ PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], &ConnectionStateTable[CSTableEntry].Info.Buffer);\r
+ }\r
+ }\r
+ }\r
+ \r
+ /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */\r
+ if (FrameOUT.FrameInBuffer)\r
+ return;\r
+ \r
+ /* Send response packets from each application as the TCP packet buffers are filled by the applications */\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* For each completely received packet, pass it along to the listening application */\r
+ if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) &&\r
+ (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready))\r
+ {\r
+ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData;\r
+ IP_Header_t* IPHeaderOUT = (IP_Header_t*)&FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)];\r
+ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)&FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+ sizeof(IP_Header_t)]; \r
+ void* TCPDataOUT = &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+ sizeof(IP_Header_t) +\r
+ sizeof(TCP_Header_t)];\r
+\r
+ uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length;\r
+\r
+ /* Fill out the TCP data */\r
+ TCPHeaderOUT->SourcePort = ConnectionStateTable[CSTableEntry].Port;\r
+ TCPHeaderOUT->DestinationPort = ConnectionStateTable[CSTableEntry].RemotePort;\r
+ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut);\r
+ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn);\r
+ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE);\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ TCPHeaderOUT->UrgentPointer = 0;\r
+ TCPHeaderOUT->Checksum = 0;\r
+ TCPHeaderOUT->Reserved = 0;\r
+\r
+ memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);\r
+ \r
+ ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;\r
+\r
+ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,\r
+ ConnectionStateTable[CSTableEntry].RemoteAddress,\r
+ (sizeof(TCP_Header_t) + PacketSize));\r
+\r
+ PacketSize += sizeof(TCP_Header_t);\r
+\r
+ /* Fill out the response IP header */\r
+ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + PacketSize);\r
+ IPHeaderOUT->TypeOfService = 0;\r
+ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+ IPHeaderOUT->Version = 4;\r
+ IPHeaderOUT->Flags = 0;\r
+ IPHeaderOUT->FragmentOffset = 0;\r
+ IPHeaderOUT->Identification = 0;\r
+ IPHeaderOUT->HeaderChecksum = 0;\r
+ IPHeaderOUT->Protocol = PROTOCOL_TCP;\r
+ IPHeaderOUT->TTL = DEFAULT_TTL;\r
+ IPHeaderOUT->SourceAddress = ServerIPAddress;\r
+ IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;\r
+ \r
+ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+ \r
+ PacketSize += sizeof(IP_Header_t);\r
+ \r
+ /* Fill out the response Ethernet frame header */\r
+ FrameOUTHeader->Source = ServerMACAddress;\r
+ FrameOUTHeader->Destination = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};\r
+ FrameOUTHeader->EtherType = SwapEndian_16(ETHERTYPE_IPV4);\r
+\r
+ PacketSize += sizeof(Ethernet_Frame_Header_t);\r
+\r
+ /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+ FrameOUT.FrameLength = PacketSize;\r
+ FrameOUT.FrameInBuffer = true;\r
+ \r
+ ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;\r
+ \r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are\r
+ * processed.\r
+ */\r
+void TCP_Init(void)\r
+{\r
+ /* Initialize the port state table with all CLOSED entries */\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)\r
+ PortStateTable[PTableEntry].State = TCP_Port_Closed;\r
+\r
+ /* Initialize the connection table with all CLOSED entries */\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed;\r
+}\r
+\r
+/** Sets the state and callback handler of the given port, specified in big endian to the given state.\r
+ *\r
+ * \param Port Port whose state and callback function to set, specified in big endian\r
+ * \param State New state of the port, a value from the TCP_PortStates_t enum\r
+ * \param Handler Application callback handler for the port\r
+ *\r
+ * \return Boolean true if the port state was set, false otherwise (no more space in the port state table)\r
+ */\r
+bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*))\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ /* Check to see if the port entry is already in the port state table */\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Find existing entry for the port in the table, update it if found */\r
+ if (PortStateTable[PTableEntry].Port == Port)\r
+ {\r
+ PortStateTable[PTableEntry].State = State;\r
+ PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+ return true;\r
+ }\r
+ }\r
+\r
+ /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */\r
+ if (State == TCP_Port_Open)\r
+ {\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Find a closed port entry in the table, change it to the given port and state */\r
+ if (PortStateTable[PTableEntry].State == TCP_Port_Closed)\r
+ {\r
+ PortStateTable[PTableEntry].Port = Port;\r
+ PortStateTable[PTableEntry].State = State;\r
+ PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ /* Port not in table and no room to add it, return failure */\r
+ return false;\r
+ }\r
+ else\r
+ {\r
+ /* Port not in table but trying to close it, so operation successful */\r
+ return true;\r
+ }\r
+}\r
+\r
+/** Retrieves the current state of a given TCP port, specified in big endian.\r
+ *\r
+ * \param Port TCP port whose state is to be retrieved, given in big-endian\r
+ *\r
+ * \return A value from the TCP_PortStates_t enum\r
+ */\r
+uint8_t TCP_GetPortState(uint16_t Port)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+ {\r
+ /* Find existing entry for the port in the table, return the port status if found */\r
+ if (PortStateTable[PTableEntry].Port == Port)\r
+ return PortStateTable[PTableEntry].State;\r
+ }\r
+ \r
+ /* Port not in table, assume closed */\r
+ return TCP_Port_Closed;\r
+}\r
+\r
+/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the\r
+ * connection exists in the connection state table it is updated, otherwise it is created if possible.\r
+ *\r
+ * \param Port TCP port of the connection on the device, specified in big endian\r
+ * \param RemoteAddress Remote protocol IP address of the connected device\r
+ * \param RemotePort TCP port of the remote device in the connection, specified in big endian\r
+ * \param State TCP connection state, a value from the TCP_ConnectionStates_t enum\r
+ *\r
+ * \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)\r
+ */\r
+bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find port entry in the table */\r
+ if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+ {\r
+ ConnectionStateTable[CSTableEntry].State = State;\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find empty entry in the table */\r
+ if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)\r
+ {\r
+ ConnectionStateTable[CSTableEntry].Port = Port;\r
+ ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress; \r
+ ConnectionStateTable[CSTableEntry].RemotePort = RemotePort;\r
+ ConnectionStateTable[CSTableEntry].State = State;\r
+ return true;\r
+ }\r
+ }\r
+ \r
+ return false;\r
+}\r
+\r
+/** Retrieves the current state of a given TCP connection to a host.\r
+ *\r
+ * \param Port TCP port on the device in the connection, specified in big endian\r
+ * \param RemoteAddress Remote protocol IP address of the connected host\r
+ * \param RemotePort Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ * \return A value from the TCP_ConnectionStates_t enum\r
+ */\r
+uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find port entry in the table */\r
+ if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+ \r
+ {\r
+ return ConnectionStateTable[CSTableEntry].State;\r
+ }\r
+ }\r
+ \r
+ return TCP_Connection_Closed;\r
+}\r
+\r
+/** Retrieves the connection info structure of a given connection to a host.\r
+ *\r
+ * \param Port TCP port on the device in the connection, specified in big endian\r
+ * \param RemoteAddress Remote protocol IP address of the connected host\r
+ * \param RemotePort Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ * \return ConnectionInfo structure of the connection if found, NULL otherwise\r
+ */\r
+TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+ /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+ {\r
+ /* Find port entry in the table */\r
+ if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+ {\r
+ return &ConnectionStateTable[CSTableEntry].Info;\r
+ }\r
+ }\r
+ \r
+ return NULL;\r
+}\r
+\r
+/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if one is created by a application handler.\r
+ *\r
+ * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
+ * \param TCPHeaderInStart Pointer to the start of the incoming packet's TCP header\r
+ * \param TCPHeaderOutStart Pointer to the start of the outgoing packet's TCP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ * response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ * next Ethernet packet handler iteration\r
+ */\r
+int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart)\r
+{\r
+ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart;\r
+ TCP_Header_t* TCPHeaderIN = (TCP_Header_t*)TCPHeaderInStart;\r
+ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;\r
+\r
+ TCP_ConnectionInfo_t* ConnectionInfo;\r
+ \r
+ DecodeTCPHeader(TCPHeaderInStart);\r
+\r
+ bool PacketResponse = false;\r
+ \r
+ /* Check if the destination port is open and allows incoming connections */\r
+ if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)\r
+ {\r
+ /* Detect SYN from host to start a connection */\r
+ if (TCPHeaderIN->Flags & TCP_FLAG_SYN)\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen);\r
+\r
+ /* Detect RST from host to abort existing connection */\r
+ if (TCPHeaderIN->Flags & TCP_FLAG_RST)\r
+ {\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed); \r
+ }\r
+ else\r
+ {\r
+ /* Process the incoming TCP packet based on the current connection state for the sender and port */\r
+ switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort))\r
+ {\r
+ case TCP_Connection_Listen:\r
+ if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
+ {\r
+ /* SYN connection when closed starts a connection with a peer */\r
+\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
+ TCP_Connection_SYNReceived);\r
+ \r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
+\r
+ ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
+ ConnectionInfo->SequenceNumberOut = 0;\r
+ ConnectionInfo->Buffer.InUse = false;\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_SYNReceived:\r
+ if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+ {\r
+ /* ACK during the connection process completes the connection to a peer */\r
+\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Established);\r
+\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+ \r
+ ConnectionInfo->SequenceNumberOut++;\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_Established:\r
+ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+ {\r
+ /* FIN ACK when connected to a peer starts the finalization process */\r
+ \r
+ TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);\r
+\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ ConnectionInfo->SequenceNumberIn++;\r
+ ConnectionInfo->SequenceNumberOut++;\r
+ }\r
+ else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH)))\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ /* Check if the buffer is currently in use either by a buffered data to send, or receive */ \r
+ if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))\r
+ { \r
+ ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;\r
+ ConnectionInfo->Buffer.InUse = true;\r
+ ConnectionInfo->Buffer.Length = 0;\r
+ }\r
+ \r
+ /* Check if the buffer has been claimed by us to read in data from the peer */\r
+ if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&\r
+ (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))\r
+ {\r
+ uint16_t IPOffset = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+ uint16_t TCPOffset = (TCPHeaderIN->DataOffset * sizeof(uint32_t));\r
+ uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset);\r
+\r
+ /* Copy the packet data into the buffer */\r
+ memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length],\r
+ &((uint8_t*)TCPHeaderInStart)[TCPOffset],\r
+ DataLength);\r
+\r
+ ConnectionInfo->SequenceNumberIn += DataLength;\r
+ ConnectionInfo->Buffer.Length += DataLength;\r
+ \r
+ /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */\r
+ if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))\r
+ {\r
+ ConnectionInfo->Buffer.InUse = false;\r
+ ConnectionInfo->Buffer.Ready = true;\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ PacketResponse = true;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* Buffer is currently in use by the application, defer processing of the incoming packet */\r
+ return NO_PROCESS;\r
+ }\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_Closing:\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);\r
+ PacketResponse = true;\r
+ \r
+ ConnectionInfo->Buffer.InUse = false;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);\r
+\r
+ break;\r
+ case TCP_Connection_FINWait1:\r
+ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ PacketResponse = true;\r
+\r
+ ConnectionInfo->SequenceNumberIn++;\r
+ ConnectionInfo->SequenceNumberOut++;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+ }\r
+ else if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+ {\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_FINWait2:\r
+ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+ PacketResponse = true;\r
+\r
+ ConnectionInfo->SequenceNumberIn++;\r
+ ConnectionInfo->SequenceNumberOut++;\r
+ \r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+ }\r
+ \r
+ break;\r
+ case TCP_Connection_CloseWait:\r
+ if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+ {\r
+ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+ }\r
+ \r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ /* Port is not open, indicate via a RST/ACK response to the sender */\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); \r
+ PacketResponse = true;\r
+ }\r
+ \r
+ /* Check if we need to respond to the sent packet */\r
+ if (PacketResponse)\r
+ {\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort);\r
+\r
+ TCPHeaderOUT->SourcePort = TCPHeaderIN->DestinationPort;\r
+ TCPHeaderOUT->DestinationPort = TCPHeaderIN->SourcePort;\r
+ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionInfo->SequenceNumberOut);\r
+ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);\r
+ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+ \r
+ if (!(ConnectionInfo->Buffer.InUse))\r
+ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE);\r
+ else\r
+ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length);\r
+\r
+ TCPHeaderOUT->UrgentPointer = 0;\r
+ TCPHeaderOUT->Checksum = 0;\r
+ TCPHeaderOUT->Reserved = 0;\r
+ \r
+ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,\r
+ IPHeaderIN->SourceAddress, sizeof(TCP_Header_t)); \r
+\r
+ return sizeof(TCP_Header_t); \r
+ }\r
+\r
+ return NO_RESPONSE;\r
+}\r
+\r
+/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,\r
+ * complimented.\r
+ *\r
+ * \param TCPHeaderOutStart Pointer to the start of the packet's outgoing TCP header\r
+ * \param SourceAddress Source protocol IP address of the outgoing IP header\r
+ * \param SourceAddress DestinationAddress protocol IP address of the outgoing IP header\r
+ * \param TCPOutSize Size in bytes of the TCP data header and payload\r
+ *\r
+ * \return A 16-bit TCP checksum value\r
+ */\r
+static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+ IP_Address_t DestinationAddress, uint16_t TCPOutSize)\r
+{\r
+ uint32_t Checksum = 0;\r
+ \r
+ /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,\r
+ complimented */\r
+ \r
+ Checksum += ((uint16_t*)&SourceAddress)[0];\r
+ Checksum += ((uint16_t*)&SourceAddress)[1];\r
+ Checksum += ((uint16_t*)&DestinationAddress)[0];\r
+ Checksum += ((uint16_t*)&DestinationAddress)[1];\r
+ Checksum += SwapEndian_16(PROTOCOL_TCP);\r
+ Checksum += SwapEndian_16(TCPOutSize);\r
+\r
+ for (uint8_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)\r
+ Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];\r
+ \r
+ if (TCPOutSize & 0x01)\r
+ Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);\r
+ \r
+ while (Checksum & 0xFFFF0000)\r
+ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+ \r
+ return ~Checksum;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for TCP.c.\r
+ */\r
+\r
+#ifndef _TCP_H_\r
+#define _TCP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>\r
+ \r
+ #include <LUFA/Scheduler/Scheduler.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** Maximum number of TCP ports which can be open at the one time */\r
+ #define MAX_OPEN_TCP_PORTS 1\r
+\r
+ /** Maximum number of TCP connections which can be sustained at the one time */\r
+ #define MAX_TCP_CONNECTIONS 1\r
+\r
+ /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */\r
+ #define TCP_WINDOW_SIZE 1024\r
+ \r
+ /** Port number for HTTP transmissions */\r
+ #define TCP_PORT_HTTP SwapEndian_16(80)\r
+ \r
+ /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */\r
+ #define TCP_PACKETDIR_IN false\r
+\r
+ /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */\r
+ #define TCP_PACKETDIR_OUT true\r
+ \r
+ /** Congestion Window Reduced TCP flag mask */\r
+ #define TCP_FLAG_CWR (1 << 7)\r
+\r
+ /** Explicit Congestion Notification TCP flag mask */\r
+ #define TCP_FLAG_ECE (1 << 6)\r
+\r
+ /** Urgent TCP flag mask */\r
+ #define TCP_FLAG_URG (1 << 5)\r
+\r
+ /** Data Acknowledge TCP flag mask */\r
+ #define TCP_FLAG_ACK (1 << 4)\r
+\r
+ /** Data Push TCP flag mask */\r
+ #define TCP_FLAG_PSH (1 << 3)\r
+\r
+ /** Reset TCP flag mask */\r
+ #define TCP_FLAG_RST (1 << 2)\r
+\r
+ /** Synchronize TCP flag mask */\r
+ #define TCP_FLAG_SYN (1 << 1)\r
+\r
+ /** Connection Finalize TCP flag mask */\r
+ #define TCP_FLAG_FIN (1 << 0)\r
+ \r
+ /** Application macro: Determines if the given application buffer contains a packet received from the host\r
+ *\r
+ * \param Buffer Application buffer to check\r
+ *\r
+ * \return Boolean true if the buffer contains a packet from the host, false otherwise\r
+ */\r
+ #define TCP_APP_HAS_RECEIVED_PACKET(Buffer) (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN))\r
+\r
+ /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.\r
+ *\r
+ * \param Buffer Application buffer to check\r
+ *\r
+ * \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise\r
+ */\r
+ #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \\r
+ (Buffer->Direction == TCP_PACKETDIR_OUT))\r
+\r
+ /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.\r
+ *\r
+ * \param Buffer Application buffer to check\r
+ *\r
+ * \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise\r
+ */\r
+ #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer) Buffer->InUse\r
+\r
+ /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be\r
+ * performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.\r
+ *\r
+ * \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().\r
+ *\r
+ * \param Buffer Application buffer to lock\r
+ */\r
+ #define TCP_APP_CAPTURE_BUFFER(Buffer) MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE\r
+\r
+ /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.\r
+ *\r
+ * \param Buffer Application buffer to release\r
+ */\r
+ #define TCP_APP_RELEASE_BUFFER(Buffer) MACROS{ Buffer->InUse = false; }MACROE\r
+\r
+ /** Application macro: Sends the contents of the given application buffer to the host.\r
+ *\r
+ * \param Buffer Application buffer to send\r
+ * \param Len Length of data contained in the buffer\r
+ */\r
+ #define TCP_APP_SEND_BUFFER(Buffer, Len) MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE\r
+\r
+ /** Application macro: Clears the application buffer, ready for a packet to be written to it.\r
+ *\r
+ * \param Buffer Application buffer to clear\r
+ */\r
+ #define TCP_APP_CLEAR_BUFFER(Buffer) MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE\r
+ \r
+ /** Application macro: Closes an open connection to a host.\r
+ *\r
+ * \param Connection Open TCP connection to close\r
+ */\r
+ #define TCP_APP_CLOSECONNECTION(Connection) MACROS{ Connection->State = TCP_Connection_Closing; }MACROE\r
+\r
+ /* Enums: */\r
+ /** Enum for possible TCP port states */\r
+ enum TCP_PortStates_t\r
+ {\r
+ TCP_Port_Closed = 0, /**< TCP port closed, no connections to a host may be made on this port. */\r
+ TCP_Port_Open = 1, /**< TCP port open, connections to a host may be made on this port. */\r
+ };\r
+ \r
+ /** Enum for possible TCP connection states */\r
+ enum TCP_ConnectionStates_t\r
+ {\r
+ TCP_Connection_Listen = 0, /**< Listening for a connection from a host */\r
+ TCP_Connection_SYNSent = 1, /**< Unused */\r
+ TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */\r
+ TCP_Connection_Established = 3, /**< Connection established in both directions */\r
+ TCP_Connection_FINWait1 = 4, /**< Closing, waiting for ACK */\r
+ TCP_Connection_FINWait2 = 5, /**< Closing, waiting for FIN ACK */\r
+ TCP_Connection_CloseWait = 6, /**< Closing, waiting for ACK */\r
+ TCP_Connection_Closing = 7, /**< Unused */\r
+ TCP_Connection_LastACK = 8, /**< Unused */\r
+ TCP_Connection_TimeWait = 9, /**< Unused */\r
+ TCP_Connection_Closed = 10, /**< Connection closed in both directions */ \r
+ };\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for a TCP connection buffer structure, including size, data and direction */\r
+ typedef struct\r
+ {\r
+ uint16_t Length; /**< Length of data in the TCP application buffer */\r
+ uint8_t Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */\r
+ bool Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN or TCP_PACKETDIR_OUT */\r
+ bool Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates\r
+ * buffer ready to be sent to the host\r
+ */\r
+ bool InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */\r
+ } TCP_ConnectionBuffer_t;\r
+\r
+ /** Type define for a TCP connection information structure */\r
+ typedef struct\r
+ {\r
+ uint32_t SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ \r
+ uint32_t SequenceNumberOut; /**< Current TCP sequence number for device-to-host */\r
+ TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */\r
+ } TCP_ConnectionInfo_t;\r
+\r
+ /** Type define for a complete TCP connection state */\r
+ typedef struct\r
+ {\r
+ uint16_t Port; /**< Connection port number on the device */\r
+ uint16_t RemotePort; /**< Connection port number on the host */\r
+ IP_Address_t RemoteAddress; /**< Connection protocol IP address of the host */\r
+ TCP_ConnectionInfo_t Info; /**< Connection information, including application buffer */\r
+ uint8_t State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */\r
+ } TCP_ConnectionState_t;\r
+\r
+ /** Type define for a TCP port state */\r
+ typedef struct\r
+ {\r
+ uint16_t Port; /**< TCP port number on the device */\r
+ uint8_t State; /**< Current port state, a value from the TCP_PortStates_t enum */\r
+ void (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState,\r
+ TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */\r
+ } TCP_PortState_t;\r
+\r
+ /** Type define for a TCP packet header */\r
+ typedef struct\r
+ {\r
+ uint16_t SourcePort; /**< Source port of the TCP packet */\r
+ uint16_t DestinationPort; /**< Destination port of the TCP packet */\r
+ \r
+ uint32_t SequenceNumber; /**< Data sequence number of the packet */\r
+ uint32_t AcknowledgmentNumber; /**< Data acknowledgment number of the packet */\r
+ \r
+ unsigned char Reserved : 4; /**< Reserved, must be all 0 */\r
+ unsigned char DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */\r
+ uint8_t Flags; /**< TCP packet flags */\r
+ uint16_t WindowSize; /**< Current data window size (bytes remaining in reception buffer) */\r
+ \r
+ uint16_t Checksum; /**< TCP checksum */\r
+ uint16_t UrgentPointer; /**< Urgent data pointer */\r
+ } TCP_Header_t;\r
+\r
+ /* Tasks: */\r
+ TASK(TCP_Task);\r
+ \r
+ /* External Variables: */\r
+ TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+ /* Function Prototypes: */\r
+ void TCP_Init(void);\r
+ bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
+ uint8_t TCP_GetPortState(uint16_t Port);\r
+ bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
+ uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);\r
+\r
+ #if defined(INCLUDE_FROM_TCP_C)\r
+ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+ IP_Address_t DestinationAddress, uint16_t TCPOutSize);\r
+ #endif\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low\r
+ * reliability packets which are typically used to encapsulate streaming data.\r
+ */\r
+ \r
+#define INCLUDE_FROM_UDP_C\r
+#include "UDP.h"\r
+\r
+/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response\r
+ * to the output Ethernet frame if a subprotocol handler has created a response packet.\r
+ *\r
+ * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
+ * \param UDPHeaderInStart Pointer to the start of the incoming packet's UDP header\r
+ * \param UDPHeaderOutStart Pointer to the start of the outgoing packet's UDP header\r
+ *\r
+ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart)\r
+{\r
+ UDP_Header_t* UDPHeaderIN = (UDP_Header_t*)UDPHeaderInStart;\r
+ UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;\r
+ \r
+ int16_t RetSize = NO_RESPONSE;\r
+ \r
+ DecodeUDPHeader(UDPHeaderInStart);\r
+ \r
+ /* Check to see if the UDP packet is a DHCP packet */\r
+ if (SwapEndian_16(UDPHeaderIN->DestinationPort) == UDP_PORT_DHCP_REQUEST)\r
+ {\r
+ RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart,\r
+ &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)],\r
+ &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);\r
+ }\r
+ \r
+ /* Check to see if the protocol processing routine has filled out a response */\r
+ if (RetSize > 0)\r
+ {\r
+ /* Fill out the response UDP packet header */\r
+ UDPHeaderOUT->SourcePort = UDPHeaderIN->DestinationPort;\r
+ UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort;\r
+ UDPHeaderOUT->Checksum = 0;\r
+ UDPHeaderOUT->Length = SwapEndian_16(sizeof(UDP_Header_t) + RetSize);\r
+\r
+ /* Return the size of the response so far */\r
+ return (sizeof(UDP_Header_t) + RetSize);\r
+ }\r
+ \r
+ return NO_RESPONSE;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for IP.c.\r
+ */\r
+\r
+#ifndef _UDP_H_\r
+#define _UDP_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ \r
+ #include "EthernetProtocols.h"\r
+ #include "Ethernet.h"\r
+ #include "ProtocolDecoders.h"\r
+ \r
+ /* Macros: */\r
+ /** Source UDP port for a DHCP request */\r
+ #define UDP_PORT_DHCP_REQUEST 67\r
+\r
+ /** Destination UDP port for a DHCP reply */\r
+ #define UDP_PORT_DHCP_REPLY 68\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for a UDP packet header */\r
+ typedef struct\r
+ {\r
+ uint16_t SourcePort; /**< Packet source port */\r
+ uint16_t DestinationPort; /**< Packet destination port */\r
+ uint16_t Length; /**< Total packet length, in bytes */\r
+ uint16_t Checksum; /**< Optional UDP packet checksum */\r
+ } UDP_Header_t;\r
+ \r
+ /* Function Prototypes: */\r
+ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart);\r
+\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This\r
+ * application will serve up a static HTTP webpage when requested by the host.\r
+ */\r
+\r
+#include "Webserver.h"\r
+\r
+/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the\r
+ * given location, and gives extra connection information.\r
+ */\r
+char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n"\r
+ "Server: LUFA RNDIS\r\n"\r
+ "Content-type: text/html\r\n"\r
+ "Connection: close\r\n\r\n";\r
+\r
+/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically\r
+ * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.\r
+ */\r
+char PROGMEM HTTPPage[] = \r
+ "<html>"\r
+ " <head>"\r
+ " <title>"\r
+ " LUFA Webserver Demo"\r
+ " </title>"\r
+ " </head>"\r
+ " <body>"\r
+ " <h1>Hello from your USB AVR!</h1>"\r
+ " <p>"\r
+ " Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."\r
+ " <br /><br />"\r
+ " <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"\r
+ " <hr />"\r
+ " <i>LUFA Version: </i>" LUFA_VERSION_STRING\r
+ " </p>"\r
+ " </body>"\r
+ "</html>";\r
+\r
+\r
+/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application\r
+ * callback routine for packets sent to the HTTP protocol port.\r
+ */\r
+void Webserver_Init(void)\r
+{\r
+ /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */\r
+ TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback);\r
+}\r
+\r
+/** Indicates if a given request equals the given HTTP command.\r
+ *\r
+ * \param RequestHeader HTTP request made by the host\r
+ * \param Command HTTP command to compare the request to\r
+ *\r
+ * \return Boolean true if the command matches the request, false otherwise\r
+ */\r
+static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)\r
+{\r
+ /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */\r
+ return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0);\r
+}\r
+\r
+/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request\r
+ * has been made (if any), and serves up appropriate responses.\r
+ *\r
+ * \param ConnectionState Pointer to a TCP Connection State structure giving connection information\r
+ * \param Buffer Pointer to the application's send/receive packet buffer\r
+ */\r
+void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)\r
+{\r
+ char* BufferDataStr = (char*)Buffer->Data;\r
+ static uint8_t PageBlock = 0;\r
+ \r
+ /* Check to see if a packet has been received on the HTTP port from a remote host */\r
+ if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))\r
+ {\r
+ if (IsHTTPCommand(Buffer->Data, "GET"))\r
+ {\r
+ PageBlock = 0;\r
+\r
+ /* Copy the HTTP response header into the packet buffer */\r
+ strcpy_P(BufferDataStr, HTTPHeader);\r
+ \r
+ /* Send the buffer contents to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+\r
+ /* Lock the buffer to Device->Host transmissions only while we send the page contents */\r
+ TCP_APP_CAPTURE_BUFFER(Buffer);\r
+ }\r
+ else if (IsHTTPCommand(Buffer->Data, "HEAD"))\r
+ {\r
+ /* Copy the HTTP response header into the packet buffer */\r
+ strcpy_P(BufferDataStr, HTTPHeader);\r
+\r
+ /* Send the buffer contents to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+ }\r
+ else if (IsHTTPCommand(Buffer->Data, "TRACE"))\r
+ {\r
+ /* Echo the host's query back to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);\r
+ }\r
+ else\r
+ {\r
+ /* Unknown request, just clear the buffer (drop the packet) */\r
+ TCP_APP_CLEAR_BUFFER(Buffer);\r
+ }\r
+ }\r
+ else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer))\r
+ {\r
+ uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);\r
+ uint16_t Length;\r
+ \r
+ /* Determine the length of the loaded block */\r
+ Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);\r
+\r
+ /* Copy the next buffer sized block of the page to the packet buffer */\r
+ strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);\r
+ \r
+ /* Send the buffer contents to the host */\r
+ TCP_APP_SEND_BUFFER(Buffer, Length);\r
+\r
+ /* Check to see if the entire page has been sent */\r
+ if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE))\r
+ {\r
+ /* Unlock the buffer so that the host can fill it with future packets */\r
+ TCP_APP_RELEASE_BUFFER(Buffer);\r
+ \r
+ /* Close the connection to the host */\r
+ TCP_APP_CLOSECONNECTION(ConnectionState);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Webserver.c.\r
+ */\r
+ \r
+#ifndef _WEBSERVER_H_\r
+#define _WEBSERVER_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+ \r
+ #include <LUFA/Version.h>\r
+ \r
+ #include "TCP.h"\r
+ \r
+ /* Macros: */\r
+ /** Maximum size of a HTTP response per transmission */\r
+ #define HTTP_REPLY_BLOCK_SIZE 128\r
+ \r
+ /* Function Prototypes: */\r
+ void Webserver_Init(void);\r
+ void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer);\r
+\r
+#endif\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>RNDISEthernet</ProjectName><Created>30-Sep-2008 14:17:05</Created><LastEdit>22-Jan-2009 17:52:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:17:05</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\LUFAWORK\Demos\RNDISEthernet\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>ARP.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Ethernet.c</SOURCEFILE><SOURCEFILE>ICMP.c</SOURCEFILE><SOURCEFILE>IP.c</SOURCEFILE><SOURCEFILE>ProtocolDecoders.c</SOURCEFILE><SOURCEFILE>RNDIS.c</SOURCEFILE><SOURCEFILE>RNDISEthernet.c</SOURCEFILE><SOURCEFILE>TCP.c</SOURCEFILE><SOURCEFILE>Webserver.c</SOURCEFILE><HEADERFILE>ARP.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Ethernet.h</HEADERFILE><HEADERFILE>EthernetProtocols.h</HEADERFILE><HEADERFILE>ICMP.h</HEADERFILE><HEADERFILE>IP.h</HEADERFILE><HEADERFILE>ProtocolDecoders.h</HEADERFILE><HEADERFILE>RNDIS.h</HEADERFILE><HEADERFILE>RNDISEthernet.h</HEADERFILE><HEADERFILE>TCP.h</HEADERFILE><HEADERFILE>Webserver.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>RNDISEthernet.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-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\EthernetProtocols.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Main source file for the RNDISEthernet demo. This file contains the main tasks of the demo and\r
+ * is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "RNDISEthernet.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = Ethernet_Task , .TaskStatus = TASK_STOP },\r
+ { .Task = TCP_Task , .TaskStatus = TASK_STOP },\r
+ { .Task = RNDIS_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ SerialStream_Init(9600, false);\r
+ \r
+ /* Webserver Initialization */\r
+ TCP_Init();\r
+ Webserver_Init();\r
+\r
+ printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops all the relevant tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running TCP/IP and USB management tasks */\r
+ Scheduler_SetTaskMode(RNDIS_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(Ethernet_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(TCP_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ * of the USB device after enumeration, and configures the RNDIS device endpoints and starts the relevant tasks.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup CDC Notification, Rx and Tx Endpoints */\r
+ Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+\r
+ /* Start TCP/IP tasks */\r
+ Scheduler_SetTaskMode(RNDIS_Task, TASK_RUN);\r
+ Scheduler_SetTaskMode(Ethernet_Task, TASK_RUN);\r
+ Scheduler_SetTaskMode(TCP_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the RNDIS control commands,\r
+ * which set up the USB RNDIS network adapter), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ /* Process RNDIS class commands */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_SendEncapsulatedCommand:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Clear the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Read in the RNDIS message into the message buffer */\r
+ Endpoint_Read_Control_Stream_LE(RNDISMessageBuffer, USB_ControlRequest.wLength);\r
+\r
+ /* Finalize the stream transfer to clear the last packet from the host */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Process the RNDIS message */\r
+ ProcessRNDISControlMessage();\r
+ }\r
+ \r
+ break;\r
+ case REQ_GetEncapsulatedResponse:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Clear the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* Check if a response to the last message is ready */\r
+ if (!(MessageHeader->MessageLength))\r
+ {\r
+ /* Set the response to a single 0x00 byte to indicate that no response is ready */\r
+ RNDISMessageBuffer[0] = 0;\r
+ MessageHeader->MessageLength = 1;\r
+ }\r
+\r
+ /* Write the message response data to the endpoint */\r
+ Endpoint_Write_Control_Stream_LE(RNDISMessageBuffer, MessageHeader->MessageLength);\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+\r
+ /* Reset the message header once again after transmission */\r
+ MessageHeader->MessageLength = 0;\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the RNDISEthernet_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ case Status_ProcessingEthernetFrame:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED3);\r
+ break; \r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the sending and receiving of encapsulated RNDIS data and notifications. This removes the RNDIS\r
+ * wrapper from received Ethernet frames and places them in the FrameIN global buffer, or adds the RNDIS wrapper\r
+ * to a frame in the FrameOUT global before sending the buffer contents to the host.\r
+ */\r
+TASK(RNDIS_Task)\r
+{\r
+ /* Select the notification endpoint */\r
+ Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
+\r
+ /* Check if a message response is ready for the host */\r
+ if (Endpoint_IsINReady() && ResponseReady)\r
+ {\r
+ USB_Notification_t Notification = (USB_Notification_t)\r
+ {\r
+ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+ .bNotification = NOTIF_RESPONSE_AVAILABLE,\r
+ .wValue = 0,\r
+ .wIndex = 0,\r
+ .wLength = 0,\r
+ };\r
+ \r
+ /* Indicate that a message response is ready for the host */\r
+ Endpoint_Write_Stream_LE(&Notification, sizeof(Notification));\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+\r
+ /* Indicate a response is no longer ready */\r
+ ResponseReady = false;\r
+ }\r
+ \r
+ /* Don't process the data endpoints until the system is in the data initialized state, and the buffer is free */\r
+ if ((CurrRNDISState == RNDIS_Data_Initialized) && !(MessageHeader->MessageLength))\r
+ {\r
+ /* Create a new packet header for reading/writing */\r
+ RNDIS_PACKET_MSG_t RNDISPacketHeader;\r
+\r
+ /* Select the data OUT endpoint */\r
+ Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
+ \r
+ /* Check if the data OUT endpoint contains data, and that the IN buffer is empty */\r
+ if (Endpoint_IsOUTReceived() && !(FrameIN.FrameInBuffer))\r
+ {\r
+ /* Read in the packet message header */\r
+ Endpoint_Read_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_PACKET_MSG_t));\r
+\r
+ /* Stall the request if the data is too large */\r
+ if (RNDISPacketHeader.DataLength > ETHERNET_FRAME_SIZE_MAX)\r
+ {\r
+ Endpoint_StallTransaction();\r
+ return;\r
+ }\r
+ \r
+ /* Read in the Ethernet frame into the buffer */\r
+ Endpoint_Read_Stream_LE(FrameIN.FrameData, RNDISPacketHeader.DataLength);\r
+\r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearOUT();\r
+ \r
+ /* Store the size of the Ethernet frame */\r
+ FrameIN.FrameLength = RNDISPacketHeader.DataLength;\r
+\r
+ /* Indicate Ethernet IN buffer full */\r
+ FrameIN.FrameInBuffer = true;\r
+ }\r
+ \r
+ /* Select the data IN endpoint */\r
+ Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
+ \r
+ /* Check if the data IN endpoint is ready for more data, and that the IN buffer is full */\r
+ if (Endpoint_IsINReady() && FrameOUT.FrameInBuffer)\r
+ {\r
+ /* Clear the packet header with all 0s so that the relevant fields can be filled */\r
+ memset(&RNDISPacketHeader, 0, sizeof(RNDIS_PACKET_MSG_t));\r
+\r
+ /* Construct the required packet header fields in the buffer */\r
+ RNDISPacketHeader.MessageType = REMOTE_NDIS_PACKET_MSG;\r
+ RNDISPacketHeader.MessageLength = (sizeof(RNDIS_PACKET_MSG_t) + FrameOUT.FrameLength);\r
+ RNDISPacketHeader.DataOffset = (sizeof(RNDIS_PACKET_MSG_t) - sizeof(RNDIS_Message_Header_t));\r
+ RNDISPacketHeader.DataLength = FrameOUT.FrameLength;\r
+\r
+ /* Send the packet header to the host */\r
+ Endpoint_Write_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_PACKET_MSG_t));\r
+\r
+ /* Send the Ethernet frame data to the host */\r
+ Endpoint_Write_Stream_LE(FrameOUT.FrameData, RNDISPacketHeader.DataLength);\r
+ \r
+ /* Finalize the stream transfer to send the last packet */\r
+ Endpoint_ClearIN();\r
+ \r
+ /* Indicate Ethernet OUT buffer no longer full */\r
+ FrameOUT.FrameInBuffer = false;\r
+ }\r
+ }\r
+}\r
+\r
+/** Ethernet frame processing task. This task checks to see if a frame has been received, and if so hands off the processing\r
+ * of the frame to the Ethernet processing routines.\r
+ */\r
+TASK(Ethernet_Task)\r
+{\r
+ /* Task for Ethernet processing. Incoming ethernet frames are loaded into the FrameIN structure, and\r
+ outgoing frames should be loaded into the FrameOUT structure. Both structures can only hold a single\r
+ Ethernet frame at a time, so the FrameInBuffer bool is used to indicate when the buffers contain data. */\r
+\r
+ /* Check if a frame has been written to the IN frame buffer */\r
+ if (FrameIN.FrameInBuffer)\r
+ {\r
+ /* Indicate packet processing started */\r
+ UpdateStatus(Status_ProcessingEthernetFrame);\r
+\r
+ /* Process the ethernet frame - replace this with your own Ethernet handler code as desired */\r
+ Ethernet_ProcessPacket();\r
+\r
+ /* Indicate packet processing complete */\r
+ UpdateStatus(Status_USBReady);\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for RNDISEthernet.c.\r
+ */\r
+ \r
+#ifndef _RNDISETHERNET_H_\r
+#define _RNDISETHERNET_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/pgmspace.h>\r
+ #include <avr/power.h>\r
+ #include <string.h>\r
+ #include <stdio.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include "Lib/RNDIS.h"\r
+ #include "Lib/Ethernet.h"\r
+ #include "Lib/TCP.h"\r
+ #include "Lib/ARP.h"\r
+ #include "Lib/Webserver.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Drivers/Peripheral/SerialStream.h> // Serial stream driver\r
+ \r
+ /* Macros: */\r
+ /** Notification value to indicate that a frame is ready to be read by the host. */\r
+ #define NOTIF_RESPONSE_AVAILABLE 0x01\r
+\r
+ /* Type Defines: */\r
+ /** Type define for a RNDIS notification message, for transmission to the RNDIS host via the notification\r
+ * Endpoint.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t bmRequestType; /**< Notification type, a mask of values from SrdRequestType.h */\r
+ uint8_t bNotification; /**< Notification index, indicating what the RNDIS notification relates to */\r
+ uint16_t wValue; /**< Two byte notification value parameter */\r
+ uint16_t wIndex; /**< Two byte notification index parameter */\r
+ uint16_t wLength; /**< Size of data payload following the notification header */\r
+ } USB_Notification_t;\r
+\r
+ /* Enums: */\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum RNDISEthernet_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ Status_ProcessingEthernetFrame = 3, /**< Currently processing an ethernet frame from the host */\r
+ };\r
+ \r
+ /* Tasks: */\r
+ TASK(RNDIS_Task);\r
+ TASK(Ethernet_Task);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+ \r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * Remote Network Driver Interface demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a CDC RNDIS device acting as a simple network interface for\r
+ * ethernet packet exchange. RNDIS is a proprietary Microsoft\r
+ * standard; this demo will only work on Windows 2000 (manually\r
+ * patched with the Microsoft RNDIS hotfix) and above (with no\r
+ * manual patches), or on the latest Linux kernels.\r
+ * \r
+ * Before running, you will need to install the INF file that\r
+ * is located in the RNDISEthernet project directory. This will\r
+ * enable Windows to use its inbuilt RNDIS drivers, negating the\r
+ * need for special Windows drivers for the device. To install,\r
+ * right-click the .INF file and choose the Install option. If\r
+ * Windows 2000 is used, the Microsoft INF file in the hotfix\r
+ * will need to be altered to use the VID/PID of the demo and\r
+ * then chosen instead of the LUFA RNDIS INF file when prompted.\r
+ * \r
+ * When enumerated, this demo will install as a new network\r
+ * adapter which ethernet packets can be sent to and received\r
+ * from. Running on top of the adapter is a very simple TCP/IP\r
+ * stack with a HTTP webserver and TELNET host which can be\r
+ * accessed through a web browser at IP address 10.0.0.2:80 or\r
+ * through a TELNET client at 10.0.0.2:25. This device also supports\r
+ * ping echos via the ICMP protocol.\r
+ * \r
+ * \note The TCP/IP stack in this demo has a number of limitations\r
+ * and should serve as an example only - it is not fully featured nor\r
+ * compliant to the TCP/IP specification. For complete projects, it is \r
+ * recommended that it be replaced with an external open source TCP/IP\r
+ * stack that is feature complete, such as the uIP stack.\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Communications Device Class (CDC)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>Microsoft RNDIS Specification</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_ETHERNET</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_ARP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_IP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_ICMP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_TCP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_UDP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>NO_DECODE_DHCP</td>\r
+ * <td>Makefile CDEFS</td>\r
+ * <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = RNDISEthernet\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ Lib/RNDIS.c \\r
+ Lib/Ethernet.c \\r
+ Lib/ProtocolDecoders.c \\r
+ Lib/ICMP.c \\r
+ Lib/TCP.c \\r
+ Lib/UDP.c \\r
+ Lib/DHCP.c \\r
+ Lib/ARP.c \\r
+ Lib/IP.c \\r
+ Lib/Webserver.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DNO_DECODE_ETHERNET -DNO_DECODE_ARP -DNO_DECODE_ICMP -DNO_DECODE_IP -DNO_DECODE_TCP -DNO_DECODE_UDP -DNO_DECODE_DHCP\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ * computer-readable structures which the host requests upon device enumeration, to determine\r
+ * the device's capabilities and functions. \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ * device characteristics, including the supported USB version, control endpoint size and the\r
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ * process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+ \r
+ .USBSpecification = VERSION_BCD(01.10),\r
+ .Class = 0x02,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
+ \r
+ .VendorID = 0x03EB,\r
+ .ProductID = 0x204B,\r
+ .ReleaseNumber = 0x0000,\r
+ \r
+ .ManufacturerStrIndex = 0x01,\r
+ .ProductStrIndex = 0x02,\r
+ .SerialNumStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ * of the device in one of its supported configurations, including information about any device interfaces\r
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ * a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+ .Config = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+ .TotalInterfaces = 2,\r
+ \r
+ .ConfigurationNumber = 1,\r
+ .ConfigurationStrIndex = NO_DESCRIPTOR,\r
+ \r
+ .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+ \r
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
+ },\r
+ \r
+ .CCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 0,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 1,\r
+ \r
+ .Class = 0x02,\r
+ .SubClass = 0x02,\r
+ .Protocol = 0x01,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .CDC_Functional_IntHeader = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x00,\r
+ \r
+ .Data = {0x01, 0x10}\r
+ },\r
+\r
+ .CDC_Functional_CallManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x01,\r
+ \r
+ .Data = {0x03, 0x01}\r
+ },\r
+\r
+ .CDC_Functional_AbstractControlManagement = \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+ .SubType = 0x02,\r
+ \r
+ .Data = {0x06}\r
+ },\r
+ \r
+ .CDC_Functional_Union= \r
+ {\r
+ .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+ .SubType = 0x06,\r
+ \r
+ .Data = {0x00, 0x01}\r
+ },\r
+\r
+ .ManagementEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+ .Attributes = EP_TYPE_INTERRUPT,\r
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
+ .PollingIntervalMS = 0xFF\r
+ },\r
+\r
+ .DCI_Interface = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+ .InterfaceNumber = 1,\r
+ .AlternateSetting = 0,\r
+ \r
+ .TotalEndpoints = 2,\r
+ \r
+ .Class = 0x0A,\r
+ .SubClass = 0x00,\r
+ .Protocol = 0x00,\r
+ \r
+ .InterfaceStrIndex = NO_DESCRIPTOR\r
+ },\r
+\r
+ .DataOutEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS = 0x00\r
+ },\r
+ \r
+ .DataInEndpoint = \r
+ {\r
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+ \r
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+ .Attributes = EP_TYPE_BULK,\r
+ .EndpointSize = CDC_TXRX_EPSIZE,\r
+ .PollingIntervalMS= 0x00\r
+ }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ * Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+ .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+ \r
+ .UnicodeString = L"LUFA USB-RS232 Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ * documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ * USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+ const uint8_t DescriptorType = (wValue >> 8);\r
+ const uint8_t DescriptorNumber = (wValue & 0xFF);\r
+\r
+ void* Address = NULL;\r
+ uint16_t Size = NO_DESCRIPTOR;\r
+\r
+ switch (DescriptorType)\r
+ {\r
+ case DTYPE_Device: \r
+ Address = (void*)&DeviceDescriptor;\r
+ Size = sizeof(USB_Descriptor_Device_t);\r
+ break;\r
+ case DTYPE_Configuration: \r
+ Address = (void*)&ConfigurationDescriptor;\r
+ Size = sizeof(USB_Descriptor_Configuration_t);\r
+ break;\r
+ case DTYPE_String: \r
+ switch (DescriptorNumber)\r
+ {\r
+ case 0x00: \r
+ Address = (void*)&LanguageString;\r
+ Size = pgm_read_byte(&LanguageString.Header.Size);\r
+ break;\r
+ case 0x01: \r
+ Address = (void*)&ManufacturerString;\r
+ Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
+ break;\r
+ case 0x02: \r
+ Address = (void*)&ProductString;\r
+ Size = pgm_read_byte(&ProductString.Header.Size);\r
+ break;\r
+ }\r
+ \r
+ break;\r
+ }\r
+ \r
+ *DescriptorAddress = Address;\r
+ return Size;\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for Descriptors.c.\r
+ */\r
+ \r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+ /* Includes: */\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+\r
+ #include <avr/pgmspace.h>\r
+\r
+ /* Macros: */\r
+ /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+ * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+ * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+ * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+ *\r
+ * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
+ */\r
+ #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
+ struct \\r
+ { \\r
+ USB_Descriptor_Header_t Header; \\r
+ uint8_t SubType; \\r
+ uint8_t Data[DataSize]; \\r
+ }\r
+ \r
+ /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPNUM 2\r
+\r
+ /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+ #define CDC_TX_EPNUM 3 \r
+\r
+ /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+ #define CDC_RX_EPNUM 4 \r
+\r
+ /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+ #define CDC_NOTIFICATION_EPSIZE 8\r
+\r
+ /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+ #define CDC_TXRX_EPSIZE 16 \r
+\r
+ /* Type Defines: */\r
+ /** Type define for the device configuration descriptor structure. This must be defined in the\r
+ * application code, as the configuration descriptor contains several sub-descriptors which\r
+ * vary between devices, and which describe the device's usage to the host.\r
+ */\r
+ typedef struct\r
+ {\r
+ USB_Descriptor_Configuration_Header_t Config;\r
+ USB_Descriptor_Interface_t CCI_Interface;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
+ USB_Descriptor_Endpoint_t ManagementEndpoint;\r
+ USB_Descriptor_Interface_t DCI_Interface;\r
+ USB_Descriptor_Endpoint_t DataOutEndpoint;\r
+ USB_Descriptor_Endpoint_t DataInEndpoint;\r
+ } USB_Descriptor_Configuration_t;\r
+\r
+ /* Function Prototypes: */\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
--- /dev/null
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+# TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+# TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME = "LUFA Library - USB to Serial Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF = "The $name class" \\r
+ "The $name widget" \\r
+ "The $name file" \\r
+ is \\r
+ provides \\r
+ specifies \\r
+ contains \\r
+ represents \\r
+ a \\r
+ an \\r
+ the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS = *.h \\r
+ *.c \\r
+ *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis. Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match. The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code. Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader. This is useful \r
+# if you want to understand what is going on. On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+# TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+# TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE = NO\r
--- /dev/null
+; Windows LUFA USB to Serial Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204B\r
+\r
+;------------------------------------------------------------------------------\r
+; Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+; String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+#include "RingBuff.h"\r
+\r
+void Buffer_Initialize(RingBuff_t* Buffer)\r
+{\r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+ Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ Buffer->Elements = 0;\r
+ }\r
+}\r
+\r
+void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data)\r
+{\r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+ #if defined(BUFF_DROPOLD)\r
+ if (Buffer->Elements == BUFF_LENGTH)\r
+ {\r
+ Buffer->OutPtr++;\r
+ \r
+ if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+ Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ }\r
+ else\r
+ {\r
+ Buffer->Elements++;\r
+ }\r
+ #elif defined(BUFF_DROPNEW)\r
+ if (Buffer->Elements == BUFF_LENGTH)\r
+ return;\r
+ \r
+ Buffer->Elements++;\r
+ #elif defined(BUFF_NODROPCHECK)\r
+ Buffer->Elements++;\r
+ #endif\r
+ \r
+ *(Buffer->InPtr) = Data;\r
+ Buffer->InPtr++;\r
+ \r
+ if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+ Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ }\r
+}\r
+\r
+RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer)\r
+{\r
+ RingBuff_Data_t BuffData;\r
+ \r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+ if (!(Buffer->Elements))\r
+ return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+ #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+ BuffData = *(Buffer->OutPtr);\r
+ \r
+ Buffer->OutPtr++;\r
+ Buffer->Elements--;\r
+ \r
+ if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+ Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+ }\r
+ \r
+ return BuffData;\r
+}\r
+\r
+#if defined(BUFF_USEPEEK)\r
+RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer)\r
+{\r
+ RingBuff_Data_t BuffData;\r
+\r
+ BUFF_ATOMIC_BLOCK\r
+ {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+ if (!(Buffer->Elements))\r
+ return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+ #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+ BuffData = *(Buffer->OutPtr);\r
+ }\r
+\r
+ return BuffData;\r
+}\r
+#endif\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/* Buffer Configuration: */\r
+ /* Buffer length - select static size of created ring buffers: */\r
+ #define BUFF_STATICSIZE 128 // Set to the static ring buffer size for all ring buffers (place size after define)\r
+\r
+ /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */\r
+ #define BUFF_VOLATILE // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access\r
+\r
+ /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */\r
+ #define BUFF_DROPOLD // Uncomment to cause full ring buffers to drop the oldest character to make space when full\r
+ // #define BUFF_DROPNEW // Uncomment to cause full ring buffers to drop the new character when full\r
+ // #define BUFF_NODROPCHECK // Uncomment to ignore full ring buffer checks - checking left to user!\r
+\r
+ /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ring buffer: */\r
+ //#define BUFF_EMPTYRETURNSZERO // Uncomment to return 0 when an empty ring buffer is read\r
+ #define BUFF_NOEMPTYCHECK // Uncomment to disable checking of empty ring buffers - checking left to user!\r
+ \r
+ /* Buffer storage type - set the datatype for the stored data */\r
+ #define BUFF_DATATYPE uint8_t // Change to the data type that is going to be stored into the buffer\r
+ \r
+ /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */\r
+ //#define BUFF_USEPEEK\r
+ \r
+#ifndef _RINGBUFF_H_\r
+#define _RINGBUFF_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/interrupt.h>\r
+ #include <util/atomic.h>\r
+ #include <limits.h>\r
+\r
+ #include <LUFA/Common/Common.h>\r
+\r
+ /* Defines and checks: */\r
+ #if defined(BUFF_STATICSIZE)\r
+ #define BUFF_LENGTH BUFF_STATICSIZE\r
+ #else\r
+ #error No buffer length specified!\r
+ #endif\r
+\r
+ #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK))\r
+ #error No buffer drop mode specified.\r
+ #endif\r
+\r
+ #if !defined(BUFF_DATATYPE)\r
+ #error Ringbuffer storage data type not specified.\r
+ #endif\r
+\r
+ #if defined(BUFF_VOLATILE)\r
+ #define BUFF_MODE volatile\r
+ #define BUFF_ATOMIC_BLOCK ATOMIC_BLOCK(ATOMIC_RESTORESTATE)\r
+ #else\r
+ #define BUFF_MODE\r
+ #define BUFF_ATOMIC_BLOCK\r
+ #endif\r
+\r
+ #if (BUFF_STATICSIZE > LONG_MAX)\r
+ #define RingBuff_Elements_t uint64_t\r
+ #elif (BUFF_STATICSIZE > INT_MAX)\r
+ #define RingBuff_Elements_t uint32_t\r
+ #elif (BUFF_STATICSIZE > CHAR_MAX)\r
+ #define RingBuff_Elements_t uint16_t\r
+ #else\r
+ #define RingBuff_Elements_t uint8_t\r
+ #endif\r
+ \r
+ /* Type Defines: */\r
+ typedef BUFF_DATATYPE RingBuff_Data_t;\r
+\r
+ typedef BUFF_MODE struct\r
+ {\r
+ RingBuff_Data_t Buffer[BUFF_LENGTH];\r
+ RingBuff_Data_t* InPtr;\r
+ RingBuff_Data_t* OutPtr;\r
+ RingBuff_Elements_t Elements;\r
+ } RingBuff_t;\r
+ \r
+ /* Function Prototypes: */\r
+ void Buffer_Initialize(RingBuff_t* Buff);\r
+ void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data);\r
+ RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer);\r
+ #if defined(BUFF_USEPEEK)\r
+ RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer);\r
+ #endif\r
+ \r
+#endif\r
--- /dev/null
+<AVRStudio><MANAGEMENT><ProjectName>USBtoSerial</ProjectName><Created>30-Sep-2008 14:18:39</Created><LastEdit>30-Sep-2008 14:18:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:18:39</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\Demos\USBtoSerial\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>RingBuff.c</SOURCEFILE><SOURCEFILE>USBtoSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>RingBuff.h</HEADERFILE><HEADERFILE>USBtoSerial.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>USBtoSerial.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>\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+#include "USBtoSerial.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+ { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
+ { .Task = CDC_Task , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Globals: */\r
+/** Contains the current baud rate and other settings of the virtual serial port.\r
+ *\r
+ * These values are set by the host via a class-specific request, and the physical USART should be reconfigured to match the\r
+ * new settings each time they are changed by the host.\r
+ */\r
+CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,\r
+ .CharFormat = OneStopBit,\r
+ .ParityType = Parity_None,\r
+ .DataBits = 8 };\r
+\r
+/** Ring (circular) buffer to hold the RX data - data from the host to the attached device on the serial port. */\r
+RingBuff_t Rx_Buffer;\r
+\r
+/** Ring (circular) buffer to hold the TX data - data from the attached device on the serial port to the host. */\r
+RingBuff_t Tx_Buffer;\r
+\r
+/** Flag to indicate if the USART is currently transmitting data from the Rx_Buffer circular buffer. */\r
+volatile bool Transmitting = false;\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ * starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+ /* Disable watchdog if enabled by bootloader/fuses */\r
+ MCUSR &= ~(1 << WDRF);\r
+ wdt_disable();\r
+\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
+\r
+ /* Hardware Initialization */\r
+ LEDs_Init();\r
+ ReconfigureUSART();\r
+ \r
+ /* Ring buffer Initialization */\r
+ Buffer_Initialize(&Rx_Buffer);\r
+ Buffer_Initialize(&Tx_Buffer);\r
+ \r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+ \r
+ /* Initialize Scheduler so that it can be used */\r
+ Scheduler_Init();\r
+\r
+ /* Initialize USB Subsystem */\r
+ USB_Init();\r
+\r
+ /* Scheduling - routine never returns, so put this last in the main function */\r
+ Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ * starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+ /* Start USB management task */\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+ /* Indicate USB enumerating */\r
+ UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ * the status LEDs and stops the USB management and CDC management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+ /* Stop running CDC and USB management tasks */\r
+ Scheduler_SetTaskMode(CDC_Task, TASK_STOP);\r
+ Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+ \r
+ /* Reset Tx and Rx buffers, device disconnected */\r
+ Buffer_Initialize(&Rx_Buffer);\r
+ Buffer_Initialize(&Tx_Buffer);\r
+\r
+ /* Indicate USB not ready */\r
+ UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ * of the USB device after enumeration - the device endpoints are configured and the CDC management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+ /* Setup CDC Notification, Rx and Tx Endpoints */\r
+ Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE);\r
+\r
+ /* Indicate USB connected and ready */\r
+ UpdateStatus(Status_USBReady);\r
+\r
+ /* Start CDC task */\r
+ Scheduler_SetTaskMode(CDC_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ * control requests that are not handled internally by the USB library (including the CDC control commands,\r
+ * which are all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+ uint8_t* LineCodingData = (uint8_t*)&LineCoding;\r
+\r
+ /* Process CDC specific control requests */\r
+ switch (USB_ControlRequest.bRequest)\r
+ {\r
+ case REQ_GetLineEncoding:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ { \r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Write the line coding data to the control endpoint */\r
+ Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(LineCoding));\r
+ \r
+ /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetLineEncoding:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ {\r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+\r
+ /* Read the line coding data in from the host into the global struct */\r
+ Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(LineCoding));\r
+\r
+ /* Finalize the stream transfer to clear the last packet from the host */\r
+ Endpoint_ClearIN();\r
+ \r
+ /* Reconfigure the USART with the new settings */\r
+ ReconfigureUSART();\r
+ }\r
+ \r
+ break;\r
+ case REQ_SetControlLineState:\r
+ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+ { \r
+ /* Acknowledge the SETUP packet, ready for data transfer */\r
+ Endpoint_ClearSETUP();\r
+ \r
+ /* NOTE: Here you can read in the line state mask from the host, to get the current state of the output handshake\r
+ lines. The mask is read in from the wValue parameter in USB_ControlRequest, and can be masked against the\r
+ CONTROL_LINE_OUT_* masks to determine the RTS and DTR line states using the following code:\r
+ */\r
+\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsINReady()));\r
+ Endpoint_ClearIN();\r
+ }\r
+ \r
+ break;\r
+ }\r
+}\r
+\r
+/** Task to manage CDC data transmission and reception to and from the host, from and to the physical USART. */\r
+TASK(CDC_Task)\r
+{\r
+ if (USB_IsConnected)\r
+ {\r
+#if 0\r
+ /* NOTE: Here you can use the notification endpoint to send back line state changes to the host, for the special RS-232\r
+ handshake signal lines (and some error states), via the CONTROL_LINE_IN_* masks and the following code:\r
+ */\r
+\r
+ USB_Notification_Header_t Notification = (USB_Notification_Header_t)\r
+ {\r
+ .NotificationType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+ .Notification = NOTIF_SerialState,\r
+ .wValue = 0,\r
+ .wIndex = 0,\r
+ .wLength = sizeof(uint16_t),\r
+ };\r
+ \r
+ uint16_t LineStateMask;\r
+ \r
+ // Set LineStateMask here to a mask of CONTROL_LINE_IN_* masks to set the input handshake line states to send to the host\r
+ \r
+ Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
+ Endpoint_Write_Stream_LE(&Notification, sizeof(Notification));\r
+ Endpoint_Write_Stream_LE(&LineStateMask, sizeof(LineStateMask));\r
+ Endpoint_ClearIN();\r
+#endif\r
+\r
+ /* Select the Serial Rx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
+ \r
+ /* Check to see if a packet has been received from the host */\r
+ if (Endpoint_IsOUTReceived())\r
+ {\r
+ /* Read the bytes in from the endpoint into the buffer while space is available */\r
+ while (Endpoint_BytesInEndpoint() && (BUFF_STATICSIZE - Rx_Buffer.Elements))\r
+ {\r
+ /* Store each character from the endpoint */\r
+ Buffer_StoreElement(&Rx_Buffer, Endpoint_Read_Byte());\r
+ }\r
+ \r
+ /* Check to see if all bytes in the current packet have been read */\r
+ if (!(Endpoint_BytesInEndpoint()))\r
+ {\r
+ /* Clear the endpoint buffer */\r
+ Endpoint_ClearOUT();\r
+ }\r
+ }\r
+ \r
+ /* Check if Rx buffer contains data - if so, send it */\r
+ if (Rx_Buffer.Elements)\r
+ Serial_TxByte(Buffer_GetElement(&Rx_Buffer));\r
+\r
+ /* Select the Serial Tx Endpoint */\r
+ Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
+\r
+ /* Check if the Tx buffer contains anything to be sent to the host */\r
+ if (Tx_Buffer.Elements)\r
+ {\r
+ /* Wait until Serial Tx Endpoint Ready for Read/Write */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+ \r
+ /* Write the bytes from the buffer to the endpoint while space is available */\r
+ while (Tx_Buffer.Elements && (Endpoint_BytesInEndpoint() < CDC_TXRX_EPSIZE))\r
+ {\r
+ /* Write each byte retreived from the buffer to the endpoint */\r
+ Endpoint_Write_Byte(Buffer_GetElement(&Tx_Buffer));\r
+ }\r
+ \r
+ /* Remember if the packet to send completely fills the endpoint */\r
+ bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE);\r
+ \r
+ /* Send the data */\r
+ Endpoint_ClearIN();\r
+\r
+ /* If no more data to send and the last packet filled the endpoint, send an empty packet to release\r
+ * the buffer on the receiver (otherwise all data will be cached until a non-full packet is received) */\r
+ if (IsFull && !(Tx_Buffer.Elements))\r
+ {\r
+ /* Wait until Serial Tx Endpoint Ready for Read/Write */\r
+ while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+ /* Send an empty packet to terminate the transfer */\r
+ Endpoint_ClearIN();\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+/** ISR to handle the USART receive complete interrupt, fired each time the USART has received a character. This stores the received\r
+ * character into the Tx_Buffer circular buffer for later transmission to the host.\r
+ */\r
+ISR(USART1_RX_vect, ISR_BLOCK)\r
+{\r
+ /* Only store received characters if the USB interface is connected */\r
+ if (USB_IsConnected)\r
+ {\r
+ /* Character received, store it into the buffer */\r
+ Buffer_StoreElement(&Tx_Buffer, UDR1);\r
+ }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ * log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ * \param CurrentStatus Current status of the system, from the USBtoSerial_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+ uint8_t LEDMask = LEDS_NO_LEDS;\r
+ \r
+ /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+ switch (CurrentStatus)\r
+ {\r
+ case Status_USBNotReady:\r
+ LEDMask = (LEDS_LED1);\r
+ break;\r
+ case Status_USBEnumerating:\r
+ LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+ break;\r
+ case Status_USBReady:\r
+ LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+ break;\r
+ }\r
+ \r
+ /* Set the board LEDs to the new LED mask */\r
+ LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Reconfigures the USART to match the current serial port settings issued by the host as closely as possible. */\r
+void ReconfigureUSART(void)\r
+{\r
+ uint8_t ConfigMask = 0;\r
+\r
+ /* Determine parity - non odd/even parity mode defaults to no parity */\r
+ if (LineCoding.ParityType == Parity_Odd)\r
+ ConfigMask = ((1 << UPM11) | (1 << UPM10));\r
+ else if (LineCoding.ParityType == Parity_Even)\r
+ ConfigMask = (1 << UPM11);\r
+\r
+ /* Determine stop bits - 1.5 stop bits is set as 1 stop bit due to hardware limitations */\r
+ if (LineCoding.CharFormat == TwoStopBits)\r
+ ConfigMask |= (1 << USBS1);\r
+\r
+ /* Determine data size - 5, 6, 7, or 8 bits are supported */\r
+ if (LineCoding.DataBits == 6)\r
+ ConfigMask |= (1 << UCSZ10);\r
+ else if (LineCoding.DataBits == 7)\r
+ ConfigMask |= (1 << UCSZ11);\r
+ else if (LineCoding.DataBits == 8)\r
+ ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10));\r
+ \r
+ /* Enable double speed, gives better error percentages at 8MHz */\r
+ UCSR1A = (1 << U2X1);\r
+ \r
+ /* Enable transmit and receive modules and interrupts */\r
+ UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));\r
+\r
+ /* Set the USART mode to the mask generated by the Line Coding options */\r
+ UCSR1C = ConfigMask;\r
+ \r
+ /* Set the USART baud rate register to the desired baud rate value */\r
+ UBRR1 = SERIAL_2X_UBBRVAL((uint16_t)LineCoding.BaudRateBPS);\r
+}\r
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ * Header file for USBtoSerial.c.\r
+ */\r
+\r
+#ifndef _USB_SERIAL_H_\r
+#define _USB_SERIAL_H_\r
+\r
+ /* Includes: */\r
+ #include <avr/io.h>\r
+ #include <avr/wdt.h>\r
+ #include <avr/interrupt.h>\r
+ #include <avr/power.h>\r
+\r
+ #include "Descriptors.h"\r
+\r
+ #include "Lib/RingBuff.h"\r
+\r
+ #include <LUFA/Version.h> // Library Version Information\r
+ #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
+ #include <LUFA/Drivers/Peripheral/Serial.h> // USART driver\r
+ #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+\r
+ /* Macros: */\r
+ /** CDC Class specific request to get the current virtual serial port configuration settings. */\r
+ #define REQ_GetLineEncoding 0x21\r
+\r
+ /** CDC Class specific request to set the current virtual serial port configuration settings. */\r
+ #define REQ_SetLineEncoding 0x20\r
+\r
+ /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
+ #define REQ_SetControlLineState 0x22\r
+ \r
+ /** Notification type constant for a change in the virtual serial port handshake line states, for\r
+ * use with a USB_Notification_Header_t notification structure when sent to the host via the CDC \r
+ * notification endpoint.\r
+ */\r
+ #define NOTIF_SerialState 0x20\r
+\r
+ /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request\r
+ * from the host, to indicate that the DTR line state should be high.\r
+ */\r
+ #define CONTROL_LINE_OUT_DTR (1 << 0)\r
+\r
+ /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request\r
+ * from the host, to indicate that theRTS line state should be high.\r
+ */\r
+ #define CONTROL_LINE_OUT_RTS (1 << 1)\r
+ \r
+ /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the DCD line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_DCD (1 << 0)\r
+\r
+ /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the DSR line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_DSR (1 << 1)\r
+\r
+ /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the BREAK line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_BREAK (1 << 2)\r
+\r
+ /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification\r
+ * from the device to the host, to indicate that the RING line state is currently high.\r
+ */\r
+ #define CONTROL_LINE_IN_RING (1 << 3)\r
+\r
+ /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+ * to indicate that a framing error has occurred on the virtual serial port.\r
+ */\r
+ #define CONTROL_LINE_IN_FRAMEERROR (1 << 4)\r
+\r
+ /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+ * to indicate that a parity error has occurred on the virtual serial port.\r
+ */\r
+ #define CONTROL_LINE_IN_PARITYERROR (1 << 5)\r
+\r
+ /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+ * to indicate that a data overrun error has occurred on the virtual serial port.\r
+ */\r
+ #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
+ \r
+ /* Type Defines: */\r
+ /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
+ * as set by the host via a class specific request.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+ uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the\r
+ * CDCDevice_CDC_LineCodingFormats_t enum\r
+ */\r
+ uint8_t ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+ * CDCDevice_LineCodingParity_t enum\r
+ */\r
+ uint8_t DataBits; /**< Bits of data per character of the virtual serial port */\r
+ } CDC_Line_Coding_t;\r
+ \r
+ /** Type define for a CDC notification, sent to the host via the CDC notification endpoint to indicate a\r
+ * change in the device state asynchronously.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t NotificationType; /**< Notification type, a mask of REQDIR_*, REQTYPE_* and REQREC_* constants\r
+ * from the library StdRequestType.h header\r
+ */\r
+ uint8_t Notification; /**< Notification value, a NOTIF_* constant */\r
+ uint16_t wValue; /**< Notification wValue, notification-specific */\r
+ uint16_t wIndex; /**< Notification wIndex, notification-specific */\r
+ uint16_t wLength; /**< Notification wLength, notification-specific */\r
+ } USB_Notification_Header_t;\r
+ \r
+ /* Enums: */\r
+ /** Enum for the possible line encoding formats of a virtual serial port. */\r
+ enum CDCDevice_CDC_LineCodingFormats_t\r
+ {\r
+ OneStopBit = 0, /**< Each frame contains one stop bit */\r
+ OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
+ TwoStopBits = 2, /**< Each frame contains two stop bits */\r
+ };\r
+ \r
+ /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
+ enum CDCDevice_LineCodingParity_t\r
+ {\r
+ Parity_None = 0, /**< No parity bit mode on each frame */\r
+ Parity_Odd = 1, /**< Odd parity bit mode on each frame */\r
+ Parity_Even = 2, /**< Even parity bit mode on each frame */\r
+ Parity_Mark = 3, /**< Mark parity bit mode on each frame */\r
+ Parity_Space = 4, /**< Space parity bit mode on each frame */\r
+ };\r
+\r
+ /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+ enum USBtoSerial_StatusCodes_t\r
+ {\r
+ Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
+ Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+ Status_USBReady = 2, /**< USB interface is connected and ready */\r
+ };\r
+ \r
+ /* Tasks: */\r
+ TASK(CDC_Task);\r
+\r
+ /* Function Prototypes: */\r
+ void EVENT_USB_Connect(void);\r
+ void EVENT_USB_Disconnect(void);\r
+ void EVENT_USB_ConfigurationChanged(void);\r
+ void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+ void ReconfigureUSART(void);\r
+ void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
--- /dev/null
+/** \file\r
+ *\r
+ * This file contains special DoxyGen information for the generation of the main page and other special\r
+ * documentation pages. It is not a project source file.\r
+ */\r
+ \r
+/** \mainpage USB to Serial Converter Demo (via CDC-ACM class)\r
+ *\r
+ * \section SSec_Info USB Information:\r
+ *\r
+ * The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>USB Mode:</b></td>\r
+ * <td>Device</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>USB Class:</b></td>\r
+ * <td>Communications Device Class (CDC)</td>\r
+ * </tr>\r
+ * <tr> \r
+ * <td><b>USB Subclass:</b></td>\r
+ * <td>Abstract Control Model (ACM)</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Relevant Standards:</b></td>\r
+ * <td>USBIF CDC Class Standard</td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td><b>Usable Speeds:</b></td>\r
+ * <td>Full Speed Mode</td>\r
+ * </tr>\r
+ * </table>\r
+ *\r
+ * \section SSec_Description Project Description: \r
+ *\r
+ * Communications Device Class demonstration application.\r
+ * This gives a simple reference application for implementing\r
+ * a USB to Serial converter using the CDC class. Sent and\r
+ * received data on the serial port is communicated to the USB\r
+ * host.\r
+ * \r
+ * After running this demo for the first time on a new computer,\r
+ * you will need to supply the .INF file located in this demo\r
+ * project's directory as the device's driver when running under\r
+ * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ * negating the need for custom drivers for the device. Other\r
+ * Operating Systems should automatically use their own inbuilt\r
+ * CDC-ACM drivers.\r
+ *\r
+ * \section SSec_Options Project Options\r
+ *\r
+ * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ * <table>\r
+ * <tr>\r
+ * <td><b>Define Name:</b></td>\r
+ * <td><b>Location:</b></td>\r
+ * <td><b>Description:</b></td>\r
+ * </tr>\r
+ * <tr>\r
+ * <td>BUFF_STATICSIZE</td>\r
+ * <td>RingBuff.h</td>\r
+ * <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
+ * </tr>\r
+ * </table>\r
+ */
\ No newline at end of file
--- /dev/null
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+# >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+# Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+# have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+# have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+# (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+# (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+# DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+# with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+# bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+# This will define a symbol, F_CPU, in all source code files equal to the \r
+# processor frequency. You can then use this symbol in your source code to \r
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+# automatically to create a 32-bit value in your source code.\r
+# Typical values are:\r
+# F_CPU = 1000000\r
+# F_CPU = 1843200\r
+# F_CPU = 2000000\r
+# F_CPU = 3686400\r
+# F_CPU = 4000000\r
+# F_CPU = 7372800\r
+# F_CPU = 8000000\r
+# F_CPU = 11059200\r
+# F_CPU = 14745600\r
+# F_CPU = 16000000\r
+# F_CPU = 18432000\r
+# F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+# This will define a symbol, F_CLOCK, in all source code files equal to the \r
+# input clock frequency (before any prescaling is performed). This value may\r
+# differ from F_CPU if prescaling is used on the latter, and is required as the\r
+# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+# at the end, this will be done automatically to create a 32-bit value in your\r
+# source code.\r
+#\r
+# If no clock division is performed on the input clock inside the AVR (via the\r
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = USBtoSerial\r
+\r
+\r
+# Object files directory\r
+# To put object files in current directory, use a dot (.), do NOT make\r
+# this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c \\r
+ Descriptors.c \\r
+ Lib/RingBuff.c \\r
+ $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
+ $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+# Make them always end in a capital .S. Files ending in a lowercase .s\r
+# will not be considered source files but generated files (assembler\r
+# output from the compiler), and will be deleted upon "make clean"!\r
+# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+# it will preserve the spelling of the filenames, and gcc itself does\r
+# care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+# 0 = turn off optimization. s = optimize for size.\r
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+# AVR Studio 4.10 requires dwarf-2.\r
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+# c89 = "ANSI" C\r
+# gnu89 = c89 plus GCC extensions\r
+# c99 = ISO C99 standard (not yet fully implemented)\r
+# gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+# -g*: generate debugging information\r
+# -O*: optimization level\r
+# -f...: tuning, see GCC manual and avr-libc documentation\r
+# -Wall...: warning level\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+# -Wa,...: tell GCC to pass this to the assembler.\r
+# -adhlns: create listing\r
+# -gstabs: have the assembler create line number information; note that\r
+# for use in COFF files, additional information about filenames\r
+# and function names needs to be present in the assembler source\r
+# files -- see avr-libc docs [FIXME: not yet described there]\r
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+# dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+# Each directory must be seperated by a space.\r
+# Use forward slashes for directory separators.\r
+# For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+# -Wl,...: tell GCC to pass this to linker.\r
+# -Map: create map file\r
+# --cref: add cross reference to map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level. Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+# just set to localhost unless doing some sort of crazy debugging when \r
+# avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = -------- end --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+ @echo\r
+ @echo $(MSG_BEGIN)\r
+\r
+end:\r
+ @echo $(MSG_END)\r
+ @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+ 2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+ @echo\r
+ @echo ------- Unhooked LUFA Events -------\r
+ @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+ cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+ echo "(None)"\r
+ @echo ------------------------------------\r
+\r
+checklibmode:\r
+ @echo\r
+ @echo ----------- Library Mode -----------\r
+ @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+ | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+ || echo "No specific mode (both device and host mode allowable)."\r
+ @echo ------------------------------------\r
+\r
+checkboard:\r
+ @echo\r
+ @echo ---------- Selected Board ----------\r
+ @echo Selected board model is $(BOARD).\r
+ @echo ------------------------------------\r
+ \r
+# Display compiler version information.\r
+gccversion : \r
+ @$(CC) --version\r
+\r
+\r
+\r
+# Program the device. \r
+program: $(TARGET).hex $(TARGET).eep\r
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+ batchisp -hardware usb -device $(MCU) -operation erase f\r
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+ dfu-programmer $(MCU) erase\r
+ dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+ dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+ copy $(TARGET).eep $(TARGET)eep.hex\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+ batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+ dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+ dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+# define the reset signal, load the target file, connect to target, and set \r
+# a breakpoint at main().\r
+gdb-config: \r
+ @$(REMOVE) $(GDBINIT_FILE)\r
+ @echo define reset >> $(GDBINIT_FILE)\r
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+ @echo end >> $(GDBINIT_FILE)\r
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+ @echo load >> $(GDBINIT_FILE)\r
+endif\r
+ @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+ @$(WINSHELL) /c pause\r
+\r
+else\r
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+ @echo\r
+ @echo $(MSG_FLASH) $@\r
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+ @echo\r
+ @echo $(MSG_EEPROM) $@\r
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+ @echo\r
+ @echo $(MSG_EXTENDED_LISTING) $@\r
+ $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+ @echo\r
+ @echo $(MSG_SYMBOL_TABLE) $@\r
+ $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_CREATING_LIBRARY) $@\r
+ $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+ @echo\r
+ @echo $(MSG_LINKING) $@\r
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+ @echo\r
+ @echo $(MSG_COMPILING) $<\r
+ $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+ @echo\r
+ @echo $(MSG_COMPILING_CPP) $<\r
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+ $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+ @echo\r
+ @echo $(MSG_ASSEMBLING) $<\r
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+ \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+ $(REMOVE) $(TARGET).hex\r
+ \r
+clean_list:\r
+ @echo $(MSG_CLEANING)\r
+ $(REMOVE) $(TARGET).eep\r
+ $(REMOVE) $(TARGET)eep.hex\r
+ $(REMOVE) $(TARGET).cof\r
+ $(REMOVE) $(TARGET).elf\r
+ $(REMOVE) $(TARGET).map\r
+ $(REMOVE) $(TARGET).sym\r
+ $(REMOVE) $(TARGET).lss\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+ $(REMOVE) $(SRC:.c=.s)\r
+ $(REMOVE) $(SRC:.c=.d)\r
+ $(REMOVE) $(SRC:.c=.i)\r
+ $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+ @echo Generating Project Documentation...\r
+ @doxygen Doxygen.conf\r
+ @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+ rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard \\r
+begin finish end sizebefore sizeafter gccversion \\r
+build elf hex eep lss sym coff extcoff clean \\r
+clean_list clean_binary program debug gdb-config \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
--- /dev/null
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2009.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA Device Demos. Call with "make all" to
+# rebuild all Device demos.
+
+# Projects 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 AudioInput clean
+ make -C AudioInput all
+
+ make -C AudioOutput clean
+ make -C AudioOutput all
+
+ make -C CDC clean
+ make -C CDC all
+
+ make -C DualCDC clean
+ make -C DualCDC all
+
+ make -C GenericHID clean
+ make -C GenericHID all
+
+ make -C Joystick clean
+ make -C Joystick all
+
+ make -C Keyboard clean
+ make -C Keyboard all
+
+ make -C KeyboardMouse clean
+ make -C KeyboardMouse all
+
+ make -C MassStorage clean
+ make -C MassStorage all
+
+ make -C MIDI clean
+ make -C MIDI all
+
+ make -C Mouse clean
+ make -C Mouse all
+
+ make -C RNDISEthernet clean
+ make -C RNDISEthernet all
+
+ make -C USBtoSerial clean
+ make -C USBtoSerial all
+
+%:
+ make -C AudioInput $@
+ make -C AudioOutput $@
+ make -C CDC $@
+ make -C DualCDC $@
+ make -C GenericHID $@
+ make -C Joystick $@
+ make -C Keyboard $@
+ make -C KeyboardMouse $@
+ make -C MassStorage $@
+ make -C MIDI $@
+ make -C Mouse $@
+ make -C RNDISEthernet $@
+ make -C USBtoSerial $@
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
- \r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2048,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
-\r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .AudioControlInterface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 0,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x01,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR \r
- },\r
- \r
- .AudioControlInterface_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_Header,\r
- \r
- .ACSpecification = VERSION_BCD(01.00),\r
- .TotalLength = sizeof(USB_AudioInterface_AC_t),\r
- \r
- .InCollection = 1,\r
- .InterfaceNumbers = {1}, \r
- },\r
-\r
- .AudioStreamInterface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x01,\r
- .SubClass = 0x03,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
- \r
- .AudioStreamInterface_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioInterface_MIDI_AS_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_General,\r
-\r
- .AudioSpecification = VERSION_BCD(01.00),\r
- \r
- .TotalLength = (sizeof(USB_Descriptor_Configuration_t) - offsetof(USB_Descriptor_Configuration_t, AudioStreamInterface_SPC))\r
- },\r
-\r
- .MIDI_In_Jack_Emb = \r
- {\r
- .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_InputJack,\r
- \r
- .JackType = MIDI_JACKTYPE_EMBEDDED,\r
- .JackID = 0x01,\r
- \r
- .JackStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .MIDI_In_Jack_Ext = \r
- {\r
- .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_InputJack,\r
- \r
- .JackType = MIDI_JACKTYPE_EXTERNAL,\r
- .JackID = 0x02,\r
- \r
- .JackStrIndex = NO_DESCRIPTOR\r
- },\r
- \r
- .MIDI_Out_Jack_Emb = \r
- {\r
- .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_OutputJack,\r
- \r
- .JackType = MIDI_JACKTYPE_EMBEDDED,\r
- .JackID = 0x03,\r
-\r
- .NumberOfPins = 1,\r
- .SourceJackID = {0x02},\r
- .SourcePinID = {0x01},\r
- \r
- .JackStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .MIDI_Out_Jack_Ext = \r
- {\r
- .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
- .Subtype = DSUBTYPE_OutputJack,\r
- \r
- .JackType = MIDI_JACKTYPE_EXTERNAL,\r
- .JackID = 0x04,\r
-\r
- .NumberOfPins = 1,\r
- .SourceJackID = {0x01},\r
- .SourcePinID = {0x01},\r
- \r
- .JackStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .MIDI_In_Jack_Endpoint = \r
- {\r
- .Endpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),\r
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
- .EndpointSize = MIDI_STREAM_EPSIZE,\r
- .PollingIntervalMS = 0\r
- },\r
- \r
- .Refresh = 0,\r
- .SyncEndpointNumber = 0\r
- },\r
- \r
- .MIDI_In_Jack_Endpoint_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
- .Subtype = DSUBTYPE_General,\r
-\r
- .TotalEmbeddedJacks = 0x01,\r
- .AssociatedJackID = {0x01}\r
- },\r
-\r
- .MIDI_Out_Jack_Endpoint = \r
- {\r
- .Endpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),\r
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
- .EndpointSize = MIDI_STREAM_EPSIZE,\r
- .PollingIntervalMS = 0\r
- },\r
- \r
- .Refresh = 0,\r
- .SyncEndpointNumber = 0\r
- },\r
- \r
- .MIDI_Out_Jack_Endpoint_SPC = \r
- {\r
- .Header = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
- .Subtype = DSUBTYPE_General,\r
-\r
- .TotalEmbeddedJacks = 0x01,\r
- .AssociatedJackID = {0x03}\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA MIDI Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device: \r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
-\r
- #include <avr/pgmspace.h>\r
-\r
- /* Macros: */\r
- /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */\r
- #define MIDI_STREAM_IN_EPNUM 2\r
-\r
- /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */\r
- #define MIDI_STREAM_OUT_EPNUM 1\r
-\r
- /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */\r
- #define MIDI_STREAM_EPSIZE 64\r
- \r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t AudioControlInterface;\r
- USB_AudioInterface_AC_t AudioControlInterface_SPC;\r
- USB_Descriptor_Interface_t AudioStreamInterface;\r
- USB_AudioInterface_MIDI_AS_t AudioStreamInterface_SPC;\r
- USB_MIDI_In_Jack_t MIDI_In_Jack_Emb;\r
- USB_MIDI_In_Jack_t MIDI_In_Jack_Ext;\r
- USB_MIDI_Out_Jack_t MIDI_Out_Jack_Emb;\r
- USB_MIDI_Out_Jack_t MIDI_Out_Jack_Ext;\r
- USB_AudioStreamEndpoint_Std_t MIDI_In_Jack_Endpoint;\r
- USB_MIDI_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC;\r
- USB_AudioStreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;\r
- USB_MIDI_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - MIDI Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>MIDI</ProjectName><Created>30-Sep-2008 14:13:12</Created><LastEdit>30-Sep-2008 14:13:33</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:12</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\Demos\MIDI\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>MIDI.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MIDI.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>MIDI.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the MIDI demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "MIDI.h"\r
-\r
-/** LUFA MIDI Class driver interface configuration and state information. This structure is\r
- * passed to all MIDI Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_MIDI_t Keyboard_MIDI_Interface =\r
- {\r
- .StreamingInterfaceNumber = 1,\r
-\r
- .DataINEndpointNumber = MIDI_STREAM_IN_EPNUM,\r
- .DataINEndpointSize = MIDI_STREAM_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = MIDI_STREAM_OUT_EPNUM,\r
- .DataOUTEndpointSize = MIDI_STREAM_EPSIZE,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- for (;;)\r
- {\r
- CheckJoystickMovement();\r
- \r
- USB_MIDI_USBTask(&Keyboard_MIDI_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
- \r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- Buttons_Init();\r
- USB_Init();\r
-}\r
-\r
-/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */\r
-void CheckJoystickMovement(void)\r
-{\r
- static uint8_t PrevJoystickStatus;\r
-\r
- uint8_t MIDICommand = 0;\r
- uint8_t MIDIPitch;\r
- \r
- /* Get current joystick mask, XOR with previous to detect joystick changes */\r
- uint8_t JoystickStatus = Joystick_GetStatus();\r
- uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);\r
- \r
- /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */\r
- uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));\r
-\r
- if (JoystickChanges & JOY_LEFT)\r
- {\r
- MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
- MIDIPitch = 0x3C;\r
- }\r
-\r
- if (JoystickChanges & JOY_UP)\r
- {\r
- MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
- MIDIPitch = 0x3D;\r
- }\r
-\r
- if (JoystickChanges & JOY_RIGHT)\r
- {\r
- MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
- MIDIPitch = 0x3E;\r
- }\r
- \r
- if (JoystickChanges & JOY_DOWN)\r
- {\r
- MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
- MIDIPitch = 0x3F;\r
- }\r
-\r
- if (JoystickChanges & JOY_PRESS)\r
- {\r
- MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
- MIDIPitch = 0x3B;\r
- }\r
- \r
- if (MIDICommand)\r
- {\r
- USB_MIDI_EventPacket_t MIDIEvent = (USB_MIDI_EventPacket_t)\r
- {\r
- .CableNumber = 0,\r
- .Command = MIDICommand,\r
- \r
- .Data1 = (MIDICommand << 4) | Channel,\r
- .Data2 = MIDIPitch,\r
- .Data3 = MIDI_STANDARD_VELOCITY, \r
- };\r
- \r
- USB_MIDI_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);\r
- }\r
-\r
- PrevJoystickStatus = JoystickStatus;\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
- \r
- if (!(USB_MIDI_ConfigureEndpoints(&Keyboard_MIDI_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_MIDI_ProcessControlPacket(&Keyboard_MIDI_Interface);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for AudioOutput.c.\r
- */\r
- \r
-#ifndef _AUDIO_OUTPUT_H_\r
-#define _AUDIO_OUTPUT_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
- #include <stdbool.h>\r
-\r
- #include "Descriptors.h"\r
- \r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Board/Buttons.h>\r
- #include <LUFA/Drivers/Peripheral/ADC.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
- void CheckJoystickMovement(void);\r
- \r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
- \r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage MIDI Input Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Audio Class</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Standard Audio Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF Audio Class Specification</td>\r
- * <td>USB-MIDI Audio Class Extension Specification</td>\r
- * <td>General MIDI Specification</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * MIDI demonstration application. This gives a simple reference\r
- * application for implementing the USB-MIDI class in USB devices.\r
- * It is built upon the USB Audio class.\r
- * \r
- * Joystick movements are translated into note on/off messages and\r
- * are sent to the host PC as MIDI streams which can be read by any\r
- * MIDI program supporting MIDI IN devices.\r
- * \r
- * If the HWB is not pressed, channel 1 (default piano) is used. If\r
- * the HWB is set, then channel 10 (default percussion) is selected.\r
- * \r
- * This device implements MIDI-THRU mode, with the IN MIDI data being\r
- * generated by the device itself. OUT MIDI data is discarded.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = MIDI\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MIDI.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2045,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = 0x03,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 1,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x08,\r
- .SubClass = 0x06,\r
- .Protocol = 0x50,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .DataInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MASS_STORAGE_IN_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = MASS_STORAGE_IO_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
-\r
- .DataOutEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | MASS_STORAGE_OUT_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = MASS_STORAGE_IO_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Mass Storage Demo"\r
-};\r
-\r
-/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12\r
- * digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By\r
- * using the unique serial number string to identify a device, the device drivers do not need to be reinstalled\r
- * each time the device is inserted into a different USB port on the same system. <b>This should be unique between\r
- * devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system\r
- * at the same time.</b>\r
- */\r
-USB_Descriptor_String_t PROGMEM SerialNumberString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"000000000000"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device: \r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- case 0x03: \r
- Address = (void*)&SerialNumberString;\r
- Size = pgm_read_byte(&SerialNumberString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h>\r
-\r
- #include <avr/pgmspace.h>\r
-\r
- /* Macros: */\r
- /** Endpoint number of the Mass Storage device-to-host data IN endpoint. */\r
- #define MASS_STORAGE_IN_EPNUM 3 \r
-\r
- /** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */\r
- #define MASS_STORAGE_OUT_EPNUM 4 \r
-\r
- /** Size in bytes of the Mass Storage data endpoints. */\r
- #define MASS_STORAGE_IO_EPSIZE 64\r
- \r
- /* Type Defines: */ \r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t Interface;\r
- USB_Descriptor_Endpoint_t DataInEndpoint;\r
- USB_Descriptor_Endpoint_t DataOutEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Mass Storage Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Functions to manage the physical dataflash media, including reading and writing of\r
- * blocks of data. These functions are called by the SCSI layer when data must be stored\r
- * or retrieved to/from the physical storage media. If a different media is used (such\r
- * as a SD card or EEPROM), functions similar to these will need to be generated.\r
- */\r
-\r
-#define INCLUDE_FROM_DATAFLASHMANAGER_C\r
-#include "DataflashManager.h"\r
-\r
-/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
- * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes\r
- * them to the dataflash in Dataflash page sized blocks.\r
- *\r
- * \param BlockAddress Data block starting address for the write sequence\r
- * \param TotalBlocks Number of blocks of data to write\r
- */\r
-void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
-{\r
- uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
- uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
- uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
- /* Copy selected dataflash's current page contents to the dataflash buffer */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
- Dataflash_WaitWhileBusy();\r
-\r
- /* Send the dataflash buffer write command */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
- Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
-\r
- /* Wait until endpoint is ready before continuing */\r
- while (!(Endpoint_IsReadWriteAllowed()));\r
-\r
- while (TotalBlocks)\r
- {\r
- uint8_t BytesInBlockDiv16 = 0;\r
- \r
- /* Write an endpoint packet sized data block to the dataflash */\r
- while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
- {\r
- /* Check if the endpoint is currently empty */\r
- if (!(Endpoint_IsReadWriteAllowed()))\r
- {\r
- /* Clear the current endpoint bank */\r
- Endpoint_ClearOUT();\r
- \r
- /* Wait until the host has sent another packet */\r
- while (!(Endpoint_IsReadWriteAllowed()));\r
- }\r
-\r
- /* Check if end of dataflash page reached */\r
- if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
- {\r
- /* Write the dataflash buffer contents back to the dataflash page */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-\r
- /* Reset the dataflash buffer counter, increment the page counter */\r
- CurrDFPageByteDiv16 = 0;\r
- CurrDFPage++;\r
-\r
- /* Select the next dataflash chip based on the new dataflash page index */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- Dataflash_WaitWhileBusy();\r
-\r
-#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
- /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
- if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
- {\r
- /* Copy selected dataflash's current page contents to the dataflash buffer */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
- Dataflash_WaitWhileBusy();\r
- }\r
-#endif\r
-\r
- /* Send the dataflash buffer write command */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
- Dataflash_SendAddressBytes(0, 0);\r
- }\r
-\r
- /* Write one 16-byte chunk of data to the dataflash */\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- Dataflash_SendByte(Endpoint_Read_Byte());\r
- \r
- /* Increment the dataflash page 16 byte block counter */\r
- CurrDFPageByteDiv16++;\r
-\r
- /* Increment the block 16 byte block counter */\r
- BytesInBlockDiv16++;\r
-\r
- /* Check if the current command is being aborted by the host */\r
- if (MSInterfaceInfo->IsMassStoreReset)\r
- return; \r
- }\r
- \r
- /* Decrement the blocks remaining counter and reset the sub block counter */\r
- TotalBlocks--;\r
- }\r
-\r
- /* Write the dataflash buffer contents back to the dataflash page */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
- Dataflash_WaitWhileBusy();\r
-\r
- /* If the endpoint is empty, clear it ready for the next packet from the host */\r
- if (!(Endpoint_IsReadWriteAllowed()))\r
- Endpoint_ClearOUT();\r
-\r
- /* Deselect all dataflash chips */\r
- Dataflash_DeselectChip();\r
-}\r
-\r
-/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
- * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash\r
- * and writes them in OS sized blocks to the endpoint.\r
- *\r
- * \param BlockAddress Data block starting address for the read sequence\r
- * \param TotalBlocks Number of blocks of data to read\r
- */\r
-void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
-{\r
- uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
- uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
- uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
- /* Send the dataflash main memory page read command */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
- Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- \r
- /* Wait until endpoint is ready before continuing */\r
- while (!(Endpoint_IsReadWriteAllowed()));\r
- \r
- while (TotalBlocks)\r
- {\r
- uint8_t BytesInBlockDiv16 = 0;\r
- \r
- /* Write an endpoint packet sized data block to the dataflash */\r
- while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
- {\r
- /* Check if the endpoint is currently full */\r
- if (!(Endpoint_IsReadWriteAllowed()))\r
- {\r
- /* Clear the endpoint bank to send its contents to the host */\r
- Endpoint_ClearIN();\r
- \r
- /* Wait until the endpoint is ready for more data */\r
- while (!(Endpoint_IsReadWriteAllowed()));\r
- }\r
- \r
- /* Check if end of dataflash page reached */\r
- if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
- {\r
- /* Reset the dataflash buffer counter, increment the page counter */\r
- CurrDFPageByteDiv16 = 0;\r
- CurrDFPage++;\r
-\r
- /* Select the next dataflash chip based on the new dataflash page index */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- \r
- /* Send the dataflash main memory page read command */\r
- Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- } \r
-\r
- /* Read one 16-byte chunk of data from the dataflash */\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
- \r
- /* Increment the dataflash page 16 byte block counter */\r
- CurrDFPageByteDiv16++;\r
- \r
- /* Increment the block 16 byte block counter */\r
- BytesInBlockDiv16++;\r
-\r
- /* Check if the current command is being aborted by the host */\r
- if (MSInterfaceInfo->IsMassStoreReset)\r
- return;\r
- }\r
- \r
- /* Decrement the blocks remaining counter */\r
- TotalBlocks--;\r
- }\r
- \r
- /* If the endpoint is full, send its contents to the host */\r
- if (!(Endpoint_IsReadWriteAllowed()))\r
- Endpoint_ClearIN();\r
-\r
- /* Deselect all dataflash chips */\r
- Dataflash_DeselectChip();\r
-}\r
-\r
-/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
- * the a given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the\r
- * dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the\r
- * dataflash.\r
- *\r
- * \param BlockAddress Data block starting address for the write sequence\r
- * \param TotalBlocks Number of blocks of data to write\r
- * \param BufferPtr Pointer to the data source RAM buffer\r
- */\r
-void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
-{\r
- uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
- uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
- uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
- /* Copy selected dataflash's current page contents to the dataflash buffer */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
- Dataflash_WaitWhileBusy();\r
-\r
- /* Send the dataflash buffer write command */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
- Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
-\r
- while (TotalBlocks)\r
- {\r
- uint8_t BytesInBlockDiv16 = 0;\r
- \r
- /* Write an endpoint packet sized data block to the dataflash */\r
- while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
- {\r
- /* Check if end of dataflash page reached */\r
- if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
- {\r
- /* Write the dataflash buffer contents back to the dataflash page */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-\r
- /* Reset the dataflash buffer counter, increment the page counter */\r
- CurrDFPageByteDiv16 = 0;\r
- CurrDFPage++;\r
-\r
- /* Select the next dataflash chip based on the new dataflash page index */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- Dataflash_WaitWhileBusy();\r
-\r
-#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
- /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
- if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
- {\r
- /* Copy selected dataflash's current page contents to the dataflash buffer */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
- Dataflash_WaitWhileBusy();\r
- }\r
-#endif\r
-\r
- /* Send the dataflash buffer write command */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
- Dataflash_SendAddressBytes(0, 0);\r
- }\r
- \r
- /* Write one 16-byte chunk of data to the dataflash */\r
- for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
- Dataflash_SendByte(*(BufferPtr++));\r
- \r
- /* Increment the dataflash page 16 byte block counter */\r
- CurrDFPageByteDiv16++;\r
-\r
- /* Increment the block 16 byte block counter */\r
- BytesInBlockDiv16++; \r
- }\r
- \r
- /* Decrement the blocks remaining counter and reset the sub block counter */\r
- TotalBlocks--;\r
- }\r
-\r
- /* Write the dataflash buffer contents back to the dataflash page */\r
- Dataflash_ToggleSelectedChipCS();\r
- Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
- Dataflash_WaitWhileBusy();\r
-\r
- /* Deselect all dataflash chips */\r
- Dataflash_DeselectChip();\r
-}\r
-\r
-/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
- * the a preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash\r
- * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read\r
- * the files stored on the dataflash.\r
- *\r
- * \param BlockAddress Data block starting address for the read sequence\r
- * \param TotalBlocks Number of blocks of data to read\r
- * \param BufferPtr Pointer to the data destination RAM buffer\r
- */\r
-void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
-{\r
- uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
- uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
- uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
- /* Send the dataflash main memory page read command */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
- Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
-\r
- while (TotalBlocks)\r
- {\r
- uint8_t BytesInBlockDiv16 = 0;\r
- \r
- /* Write an endpoint packet sized data block to the dataflash */\r
- while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
- {\r
- /* Check if end of dataflash page reached */\r
- if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
- {\r
- /* Reset the dataflash buffer counter, increment the page counter */\r
- CurrDFPageByteDiv16 = 0;\r
- CurrDFPage++;\r
-\r
- /* Select the next dataflash chip based on the new dataflash page index */\r
- Dataflash_SelectChipFromPage(CurrDFPage);\r
- \r
- /* Send the dataflash main memory page read command */\r
- Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
- Dataflash_SendAddressBytes(CurrDFPage, 0);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- Dataflash_SendByte(0x00);\r
- } \r
-\r
- /* Read one 16-byte chunk of data from the dataflash */\r
- for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
- *(BufferPtr++) = Dataflash_ReceiveByte();\r
- \r
- /* Increment the dataflash page 16 byte block counter */\r
- CurrDFPageByteDiv16++;\r
- \r
- /* Increment the block 16 byte block counter */\r
- BytesInBlockDiv16++;\r
- }\r
- \r
- /* Decrement the blocks remaining counter */\r
- TotalBlocks--;\r
- }\r
-\r
- /* Deselect all dataflash chips */\r
- Dataflash_DeselectChip();\r
-}\r
-\r
-/** Disables the dataflash memory write protection bits on the board Dataflash ICs, if enabled. */\r
-void DataflashManager_ResetDataflashProtections(void)\r
-{\r
- /* Select first dataflash chip, send the read status register command */\r
- Dataflash_SelectChip(DATAFLASH_CHIP1);\r
- Dataflash_SendByte(DF_CMD_GETSTATUS);\r
- \r
- /* Check if sector protection is enabled */\r
- if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
- {\r
- Dataflash_ToggleSelectedChipCS();\r
-\r
- /* Send the commands to disable sector protection */\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
- }\r
- \r
- /* Select second dataflash chip (if present on selected board), send read status register command */\r
- #if (DATAFLASH_TOTALCHIPS == 2)\r
- Dataflash_SelectChip(DATAFLASH_CHIP2);\r
- Dataflash_SendByte(DF_CMD_GETSTATUS);\r
- \r
- /* Check if sector protection is enabled */\r
- if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
- {\r
- Dataflash_ToggleSelectedChipCS();\r
-\r
- /* Send the commands to disable sector protection */\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
- Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
- }\r
- #endif\r
- \r
- /* Deselect current dataflash chip */\r
- Dataflash_DeselectChip();\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for DataflashManager.c.\r
- */\r
- \r
-#ifndef _DATAFLASH_MANAGER_H\r
-#define _DATAFLASH_MANAGER_H\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- \r
- #include "MassStorage.h"\r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Common/Common.h> // Function Attribute, Atomic, Debug and ISR Macros\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Dataflash.h> // Dataflash chip driver\r
-\r
- /* Preprocessor Checks: */\r
- #if (DATAFLASH_PAGE_SIZE % 16)\r
- #error Dataflash page size must be a multiple of 16 bytes.\r
- #endif\r
-\r
- /* Defines: */\r
- /** Total number of bytes of the storage medium, comprised of one or more dataflash ICs. */\r
- #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
-\r
- /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
- * storage media (Dataflash) using a different native block size.\r
- */\r
- #define VIRTUAL_MEMORY_BLOCK_SIZE 512\r
- \r
- /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */\r
- #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
- \r
- /* Function Prototypes: */\r
- void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
- void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
- void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
- uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
- void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
- uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
- void DataflashManager_ResetDataflashProtections(void);\r
- \r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage\r
- * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,\r
- * which wrap around standard SCSI device commands for controlling the actual storage medium.\r
- */\r
- \r
-#define INCLUDE_FROM_SCSI_C\r
-#include "SCSI.h"\r
-\r
-/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's\r
- * features and capabilities.\r
- */\r
-SCSI_Inquiry_Response_t InquiryData = \r
- {\r
- .DeviceType = DEVICE_TYPE_BLOCK,\r
- .PeripheralQualifier = 0,\r
- \r
- .Removable = true,\r
- \r
- .Version = 0,\r
- \r
- .ResponseDataFormat = 2,\r
- .NormACA = false,\r
- .TrmTsk = false,\r
- .AERC = false,\r
-\r
- .AdditionalLength = 0x1F,\r
- \r
- .SoftReset = false,\r
- .CmdQue = false,\r
- .Linked = false,\r
- .Sync = false,\r
- .WideBus16Bit = false,\r
- .WideBus32Bit = false,\r
- .RelAddr = false,\r
- \r
- .VendorID = "LUFA",\r
- .ProductID = "Dataflash Disk",\r
- .RevisionID = {'0','.','0','0'},\r
- };\r
-\r
-/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE\r
- * command is issued. This gives information on exactly why the last command failed to complete.\r
- */\r
-SCSI_Request_Sense_Response_t SenseData =\r
- {\r
- .ResponseCode = 0x70,\r
- .AdditionalLength = 0x0A,\r
- };\r
-\r
-\r
-/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches\r
- * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns\r
- * a command failure due to a ILLEGAL REQUEST.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
- */\r
-bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
- bool CommandSuccess = false;\r
-\r
- /* Run the appropriate SCSI command hander function based on the passed command */\r
- switch (MSInterfaceInfo->CommandBlock.SCSICommandData[0])\r
- {\r
- case SCSI_CMD_INQUIRY:\r
- CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo); \r
- break;\r
- case SCSI_CMD_REQUEST_SENSE:\r
- CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);\r
- break;\r
- case SCSI_CMD_READ_CAPACITY_10:\r
- CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo); \r
- break;\r
- case SCSI_CMD_SEND_DIAGNOSTIC:\r
- CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo);\r
- break;\r
- case SCSI_CMD_WRITE_10:\r
- CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);\r
- break;\r
- case SCSI_CMD_READ_10:\r
- CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);\r
- break;\r
- case SCSI_CMD_TEST_UNIT_READY:\r
- case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:\r
- case SCSI_CMD_VERIFY_10:\r
- /* These commands should just succeed, no handling required */\r
- CommandSuccess = true;\r
- MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
- break;\r
- default:\r
- /* Update the SENSE key to reflect the invalid command */\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
- SCSI_ASENSE_INVALID_COMMAND,\r
- SCSI_ASENSEQ_NO_QUALIFIER);\r
- break;\r
- }\r
-\r
- /* Check if command was successfully processed */\r
- if (CommandSuccess)\r
- {\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,\r
- SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
- SCSI_ASENSEQ_NO_QUALIFIER);\r
- \r
- return true;\r
- }\r
-\r
- return false;\r
-}\r
-\r
-/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features\r
- * and capabilities to the host.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- * \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
- uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->CommandBlock.SCSICommandData[3] << 8) |\r
- MSInterfaceInfo->CommandBlock.SCSICommandData[4]);\r
- uint16_t BytesTransferred = (AllocationLength < sizeof(InquiryData))? AllocationLength :\r
- sizeof(InquiryData);\r
-\r
- /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */\r
- if ((MSInterfaceInfo->CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||\r
- MSInterfaceInfo->CommandBlock.SCSICommandData[2])\r
- {\r
- /* Optional but unsupported bits set - update the SENSE key and fail the request */\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
- SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
- SCSI_ASENSEQ_NO_QUALIFIER);\r
-\r
- return false;\r
- }\r
- \r
- Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);\r
-\r
- uint8_t PadBytes[AllocationLength - BytesTransferred];\r
- \r
- /* Pad out remaining bytes with 0x00 */\r
- Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
-\r
- /* Finalize the stream transfer to send the last packet */\r
- Endpoint_ClearIN();\r
-\r
- /* Succeed the command and update the bytes transferred counter */\r
- MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
- \r
- return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,\r
- * including the error code and additional error information so that the host can determine why a command failed to complete.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- * \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
- uint8_t AllocationLength = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
- uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);\r
- \r
- uint8_t PadBytes[AllocationLength - BytesTransferred];\r
-\r
- Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NO_STREAM_CALLBACK);\r
- Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
- Endpoint_ClearIN();\r
-\r
- /* Succeed the command and update the bytes transferred counter */\r
- MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
-\r
- return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity\r
- * on the selected Logical Unit (drive), as a number of OS-sized blocks.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- * \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
- uint32_t TotalLUNs = (LUN_MEDIA_BLOCKS - 1);\r
- uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE;\r
-\r
- Endpoint_Write_Stream_BE(&TotalLUNs, sizeof(TotalLUNs), NO_STREAM_CALLBACK);\r
- Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NO_STREAM_CALLBACK);\r
- Endpoint_ClearIN();\r
- \r
- /* Succeed the command and update the bytes transferred counter */\r
- MSInterfaceInfo->CommandBlock.DataTransferLength -= 8;\r
- \r
- return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the\r
- * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is\r
- * supported.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- * \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
- uint8_t ReturnByte;\r
-\r
- /* Check to see if the SELF TEST bit is not set */\r
- if (!(MSInterfaceInfo->CommandBlock.SCSICommandData[1] & (1 << 2)))\r
- {\r
- /* Only self-test supported - update SENSE key and fail the command */\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
- SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
- SCSI_ASENSEQ_NO_QUALIFIER);\r
-\r
- return false;\r
- }\r
- \r
- /* Test first Dataflash IC is present and responding to commands */\r
- Dataflash_SelectChip(DATAFLASH_CHIP1);\r
- Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
- ReturnByte = Dataflash_ReceiveByte();\r
- Dataflash_DeselectChip();\r
-\r
- /* If returned data is invalid, fail the command */\r
- if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
- {\r
- /* Update SENSE key with a hardware error condition and return command fail */\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
- SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
- SCSI_ASENSEQ_NO_QUALIFIER); \r
- \r
- return false;\r
- }\r
-\r
- #if (DATAFLASH_TOTALCHIPS == 2)\r
- /* Test second Dataflash IC is present and responding to commands */\r
- Dataflash_SelectChip(DATAFLASH_CHIP2);\r
- Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
- ReturnByte = Dataflash_ReceiveByte();\r
- Dataflash_DeselectChip();\r
-\r
- /* If returned data is invalid, fail the command */\r
- if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
- {\r
- /* Update SENSE key with a hardware error condition and return command fail */\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
- SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
- SCSI_ASENSEQ_NO_QUALIFIER); \r
- \r
- return false;\r
- }\r
- #endif\r
- \r
- /* Succeed the command and update the bytes transferred counter */\r
- MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
- \r
- return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address\r
- * and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual\r
- * reading and writing of the data.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with\r
- * \param IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)\r
- *\r
- * \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead)\r
-{\r
- uint32_t BlockAddress;\r
- uint16_t TotalBlocks;\r
- \r
- /* Load in the 32-bit block address (SCSI uses big-endian, so have to do it byte-by-byte) */\r
- ((uint8_t*)&BlockAddress)[3] = MSInterfaceInfo->CommandBlock.SCSICommandData[2];\r
- ((uint8_t*)&BlockAddress)[2] = MSInterfaceInfo->CommandBlock.SCSICommandData[3];\r
- ((uint8_t*)&BlockAddress)[1] = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
- ((uint8_t*)&BlockAddress)[0] = MSInterfaceInfo->CommandBlock.SCSICommandData[5];\r
-\r
- /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to do it byte-by-byte) */\r
- ((uint8_t*)&TotalBlocks)[1] = MSInterfaceInfo->CommandBlock.SCSICommandData[7];\r
- ((uint8_t*)&TotalBlocks)[0] = MSInterfaceInfo->CommandBlock.SCSICommandData[8];\r
- \r
- /* Check if the block address is outside the maximum allowable value for the LUN */\r
- if (BlockAddress >= LUN_MEDIA_BLOCKS)\r
- {\r
- /* Block address is invalid, update SENSE key and return command fail */\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
- SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,\r
- SCSI_ASENSEQ_NO_QUALIFIER);\r
-\r
- return false;\r
- }\r
-\r
- #if (TOTAL_LUNS > 1)\r
- /* Adjust the given block address to the real media address based on the selected LUN */\r
- BlockAddress += ((uint32_t)MSInterfaceInfo->CommandBlock.LUN * LUN_MEDIA_BLOCKS);\r
- #endif\r
- \r
- /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */\r
- if (IsDataRead == DATA_READ)\r
- DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
- else\r
- DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
-\r
- /* Update the bytes transferred counter and succeed the command */\r
- MSInterfaceInfo->CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);\r
- \r
- return true;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for SCSI.c.\r
- */\r
- \r
-#ifndef _SCSI_H_\r
-#define _SCSI_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>\r
-\r
- #include "MassStorage.h"\r
- #include "Descriptors.h"\r
- #include "DataflashManager.h"\r
- #include "SCSI_Codes.h"\r
- \r
- /* Macros: */\r
- /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This\r
- * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about\r
- * the last command failure) in a quick and easy manner.\r
- *\r
- * \param key New SCSI sense key to set the sense code to\r
- * \param acode New SCSI additional sense key to set the additional sense code to\r
- * \param aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to\r
- */\r
- #define SCSI_SET_SENSE(key, acode, aqual) MACROS{ SenseData.SenseKey = key; \\r
- SenseData.AdditionalSenseCode = acode; \\r
- SenseData.AdditionalSenseQualifier = aqual; }MACROE\r
-\r
- /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */\r
- #define DATA_READ true\r
-\r
- /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */\r
- #define DATA_WRITE false\r
-\r
- /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */\r
- #define DEVICE_TYPE_BLOCK 0x00\r
- \r
- /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */\r
- #define DEVICE_TYPE_CDROM 0x05\r
-\r
- /* Type Defines: */\r
- /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the\r
- * structure contents, refer to the SCSI specifications.\r
- */\r
- typedef struct\r
- {\r
- unsigned char DeviceType : 5;\r
- unsigned char PeripheralQualifier : 3;\r
- \r
- unsigned char _RESERVED1 : 7;\r
- unsigned char Removable : 1;\r
- \r
- uint8_t Version;\r
- \r
- unsigned char ResponseDataFormat : 4;\r
- unsigned char _RESERVED2 : 1;\r
- unsigned char NormACA : 1;\r
- unsigned char TrmTsk : 1;\r
- unsigned char AERC : 1;\r
-\r
- uint8_t AdditionalLength;\r
- uint8_t _RESERVED3[2];\r
-\r
- unsigned char SoftReset : 1;\r
- unsigned char CmdQue : 1;\r
- unsigned char _RESERVED4 : 1;\r
- unsigned char Linked : 1;\r
- unsigned char Sync : 1;\r
- unsigned char WideBus16Bit : 1;\r
- unsigned char WideBus32Bit : 1;\r
- unsigned char RelAddr : 1;\r
- \r
- uint8_t VendorID[8];\r
- uint8_t ProductID[16];\r
- uint8_t RevisionID[4];\r
- } SCSI_Inquiry_Response_t;\r
- \r
- /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the\r
- * structure contents, refer to the SCSI specifications.\r
- */\r
- typedef struct\r
- {\r
- uint8_t ResponseCode;\r
- \r
- uint8_t SegmentNumber;\r
- \r
- unsigned char SenseKey : 4;\r
- unsigned char _RESERVED1 : 1;\r
- unsigned char ILI : 1;\r
- unsigned char EOM : 1;\r
- unsigned char FileMark : 1;\r
- \r
- uint8_t Information[4];\r
- uint8_t AdditionalLength;\r
- uint8_t CmdSpecificInformation[4];\r
- uint8_t AdditionalSenseCode;\r
- uint8_t AdditionalSenseQualifier;\r
- uint8_t FieldReplaceableUnitCode;\r
- uint8_t SenseKeySpecific[3];\r
- } SCSI_Request_Sense_Response_t;\r
- \r
- /* Function Prototypes: */\r
- bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
- \r
- #if defined(INCLUDE_FROM_SCSI_C)\r
- static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
- static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
- static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
- static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
- static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead);\r
- #endif\r
- \r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header containing macros for possible SCSI commands and SENSE data. Refer to\r
- * the SCSI standard documentation for more information on each SCSI command and\r
- * the SENSE data.\r
- */\r
- \r
-#ifndef _SCSI_CODES_H_\r
-#define _SCSI_CODES_H_\r
-\r
- /* Macros: */\r
- #define SCSI_CMD_INQUIRY 0x12\r
- #define SCSI_CMD_REQUEST_SENSE 0x03\r
- #define SCSI_CMD_TEST_UNIT_READY 0x00\r
- #define SCSI_CMD_READ_CAPACITY_10 0x25\r
- #define SCSI_CMD_SEND_DIAGNOSTIC 0x1D\r
- #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E\r
- #define SCSI_CMD_WRITE_10 0x2A\r
- #define SCSI_CMD_READ_10 0x28\r
- #define SCSI_CMD_WRITE_6 0x0A\r
- #define SCSI_CMD_READ_6 0x08\r
- #define SCSI_CMD_VERIFY_10 0x2F\r
- #define SCSI_CMD_MODE_SENSE_6 0x1A\r
- #define SCSI_CMD_MODE_SENSE_10 0x5A\r
-\r
- #define SCSI_SENSE_KEY_GOOD 0x00\r
- #define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01\r
- #define SCSI_SENSE_KEY_NOT_READY 0x02\r
- #define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03\r
- #define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04\r
- #define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05\r
- #define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06\r
- #define SCSI_SENSE_KEY_DATA_PROTECT 0x07\r
- #define SCSI_SENSE_KEY_BLANK_CHECK 0x08\r
- #define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09\r
- #define SCSI_SENSE_KEY_COPY_ABORTED 0x0A\r
- #define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B\r
- #define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D\r
- #define SCSI_SENSE_KEY_MISCOMPARE 0x0E\r
-\r
- #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION 0x00\r
- #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY 0x04\r
- #define SCSI_ASENSE_INVALID_FIELD_IN_CDB 0x24\r
- #define SCSI_ASENSE_WRITE_PROTECTED 0x27\r
- #define SCSI_ASENSE_FORMAT_ERROR 0x31\r
- #define SCSI_ASENSE_INVALID_COMMAND 0x20\r
- #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21\r
- #define SCSI_ASENSE_MEDIUM_NOT_PRESENT 0x3A\r
-\r
- #define SCSI_ASENSEQ_NO_QUALIFIER 0x00\r
- #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED 0x01\r
- #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED 0x02\r
- #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07\r
-\r
-#endif\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>MassStorage</ProjectName><Created>30-Sep-2008 14:12:09</Created><LastEdit>30-Sep-2008 14:12:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:12:09</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\Demos\MassStorage\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>DataflashManager.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MassStorage.c</SOURCEFILE><SOURCEFILE>SCSI.c</SOURCEFILE><HEADERFILE>DataflashManager.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MassStorage.h</HEADERFILE><HEADERFILE>SCSI.h</HEADERFILE><HEADERFILE>SCSI_Codes.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MassStorage.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the MassStorage demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "MassStorage.h"\r
-\r
-/** LUFA Mass Storage Class driver interface configuration and state information. This structure is\r
- * passed to all Mass Storage Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_MS_t Disk_MS_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .DataINEndpointNumber = MASS_STORAGE_IN_EPNUM,\r
- .DataINEndpointSize = MASS_STORAGE_IO_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = MASS_STORAGE_OUT_EPNUM,\r
- .DataOUTEndpointSize = MASS_STORAGE_IO_EPSIZE,\r
-\r
- .TotalLUNs = TOTAL_LUNS,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- for (;;)\r
- {\r
- USB_MS_USBTask(&Disk_MS_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- LEDs_Init();\r
- Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
- USB_Init();\r
-\r
- /* Clear Dataflash sector protections, if enabled */\r
- DataflashManager_ResetDataflashProtections();\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_MS_ConfigureEndpoints(&Disk_MS_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_MS_ProcessControlPacket(&Disk_MS_Interface);\r
-}\r
-\r
-/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed.\r
- *\r
- * \param MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced\r
- */\r
-bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
- bool CommandSuccess;\r
- \r
- LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
- CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
- \r
- return CommandSuccess;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for MassStorage.c.\r
- */\r
-\r
-#ifndef _MASS_STORAGE_H_\r
-#define _MASS_STORAGE_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/power.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include "Lib/SCSI.h"\r
- #include "Lib/DataflashManager.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Buttons.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
- #define LEDMASK_USB_BUSY (LEDS_LED2)\r
- \r
- /** Total number of logical drives within the device - must be non-zero. */\r
- #define TOTAL_LUNS 2\r
- \r
- /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */\r
- #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Mass Storage Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Mass Storage Device</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Bulk-Only Transport</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF Mass Storage Standard</td>\r
- * <td>USB Bulk-Only Transport Standard</td>\r
- * <td>SCSI Primary Commands Specification</td>\r
- * <td>SCSI Block Commands Specification</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Dual LUN Mass Storage demonstration application. This gives a simple\r
- * reference application for implementing a multiple LUN USB Mass Storage\r
- * device using the basic USB UFI drivers in all modern OSes (i.e. no\r
- * special drivers required).\r
- * \r
- * On start-up the system will automatically enumerate and function as an\r
- * external mass storage device with two LUNs (separate disks) which may\r
- * be formatted and used in the same manner as commercial USB Mass Storage\r
- * devices.\r
- * \r
- * You will need to format the mass storage drives upon first run of this\r
- * demonstration - as the device acts only as a data block transport between\r
- * the host and the storage media, it does not matter what file system is used,\r
- * as the data interpretation is performed by the host and not the USB device.\r
- * \r
- * This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS\r
- * value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to\r
- * 255), with each LUN being allocated an equal portion of the available\r
- * Dataflash memory.\r
- *\r
- * The USB control endpoint is managed entirely by the library using endpoint\r
- * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for\r
- * the host to reset the Mass Storage device state during long transfers without\r
- * the need for complicated polling logic.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>TOTAL_LUNS</td>\r
- * <td>MassStorage.h</td>\r
- * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive\r
- * - this can be set to any positive non-zero amount.</td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = MassStorage\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- Lib/SCSI.c \\r
- Lib/DataflashManager.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MassStorage.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax\r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- * more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
-{\r
- 0x05, 0x01, /* Usage Page (Generic Desktop) */\r
- 0x09, 0x02, /* Usage (Mouse) */\r
- 0xA1, 0x01, /* Collection (Application) */\r
- 0x09, 0x01, /* Usage (Pointer) */\r
- 0xA1, 0x00, /* Collection (Application) */\r
- 0x95, 0x03, /* Report Count (3) */\r
- 0x75, 0x01, /* Report Size (1) */\r
- 0x05, 0x09, /* Usage Page (Button) */\r
- 0x19, 0x01, /* Usage Minimum (Button 1) */\r
- 0x29, 0x03, /* Usage Maximum (Button 3) */\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0x01, /* Logical Maximum (1) */\r
- 0x81, 0x02, /* Input (Data, Variable, Absolute) */\r
- 0x95, 0x01, /* Report Count (1) */\r
- 0x75, 0x05, /* Report Size (5) */\r
- 0x81, 0x01, /* Input (Constant) */\r
- 0x75, 0x08, /* Report Size (8) */\r
- 0x95, 0x02, /* Report Count (2) */\r
- 0x05, 0x01, /* Usage Page (Generic Desktop Control) */\r
- 0x09, 0x30, /* Usage X */\r
- 0x09, 0x31, /* Usage Y */\r
- 0x15, 0x81, /* Logical Minimum (-127) */\r
- 0x25, 0x7F, /* Logical Maximum (127) */\r
- 0x81, 0x06, /* Input (Data, Variable, Relative) */\r
- 0xC0, /* End Collection */\r
- 0xC0 /* End Collection */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x2041,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 1,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x00,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x01,\r
- .Protocol = 0x02,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .MouseHID = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalReportDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(MouseReport)\r
- },\r
-\r
- .MouseEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = MOUSE_EPSIZE,\r
- .PollingIntervalMS = 0x02\r
- } \r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA Mouse Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration:\r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String:\r
- switch (DescriptorNumber)\r
- {\r
- case 0x00:\r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01:\r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02:\r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- case DTYPE_HID: \r
- Address = (void*)&ConfigurationDescriptor.MouseHID;\r
- Size = sizeof(USB_Descriptor_HID_t);\r
- break;\r
- case DTYPE_Report: \r
- Address = (void*)&MouseReport;\r
- Size = sizeof(MouseReport);\r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address; \r
- return Size;\r
-}\r
-\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t Interface;\r
- USB_Descriptor_HID_t MouseHID;\r
- USB_Descriptor_Endpoint_t MouseEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
- \r
- /* Macros: */\r
- /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
- #define MOUSE_EPNUM 1\r
- \r
- /** Size in bytes of the Mouse HID reporting IN endpoint. */\r
- #define MOUSE_EPSIZE 8\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - Mouse Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>Mouse</ProjectName><Created>30-Sep-2008 14:13:52</Created><LastEdit>30-Sep-2008 14:14:08</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:52</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\Demos\Mouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>Descriptors.c</SOURCEFILE><SOURCEFILE>Mouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Mouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Mouse.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the Mouse demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "Mouse.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- * passed to all HID Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Mouse_HID_Interface =\r
- {\r
- .InterfaceNumber = 0,\r
-\r
- .ReportINEndpointNumber = MOUSE_EPNUM,\r
- .ReportINEndpointSize = MOUSE_EPSIZE,\r
-\r
- .ReportINBufferSize = sizeof(USB_MouseReport_Data_t),\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{ \r
- SetupHardware();\r
- \r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- for (;;)\r
- {\r
- USB_HID_USBTask(&Mouse_HID_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- Buttons_Init();\r
- USB_Init();\r
-\r
- /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
- OCR0A = ((F_CPU / 64) / 1000);\r
- TCCR0A = (1 << WGM01);\r
- TCCR0B = ((1 << CS01) | (1 << CS00));\r
- TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
- if (Mouse_HID_Interface.IdleMSRemaining)\r
- Mouse_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report should be stored\r
- *\r
- * \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
- USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
- \r
- uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
- uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
- if (JoyStatus_LCL & JOY_UP)\r
- MouseReport->Y = -1;\r
- else if (JoyStatus_LCL & JOY_DOWN)\r
- MouseReport->Y = 1;\r
-\r
- if (JoyStatus_LCL & JOY_RIGHT)\r
- MouseReport->X = 1;\r
- else if (JoyStatus_LCL & JOY_LEFT)\r
- MouseReport->X = -1;\r
-\r
- if (JoyStatus_LCL & JOY_PRESS)\r
- MouseReport->Button = (1 << 0);\r
- \r
- if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
- MouseReport->Button |= (1 << 1);\r
- \r
- return sizeof(USB_MouseReport_Data_t);\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced\r
- * \param ReportData Pointer to a buffer where the created report has been stored\r
- * \param ReportSize Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
- void* ReportData, uint16_t ReportSize)\r
-{\r
- // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Mouse.c.\r
- */\r
-\r
-#ifndef _MOUSE_H_\r
-#define _MOUSE_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/interrupt.h>\r
- #include <avr/power.h>\r
- #include <stdbool.h>\r
- #include <string.h>\r
- \r
- #include "Descriptors.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Buttons.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
- /* Type Defines: */\r
- /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
- * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
- */\r
- typedef struct\r
- {\r
- uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
- int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
- int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
- } USB_MouseReport_Data_t;\r
- \r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
- void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
- void* ReportData, uint16_t ReportSize);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage Mouse Device Demo\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Human Interface Device (HID)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>N/A</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Low Speed Mode, Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Mouse demonstration application. This gives a simple reference\r
- * application for implementing a USB Mouse using the basic USB HID\r
- * drivers in all modern OSes (i.e. no special drivers required). It is\r
- * boot protocol compatible, and thus works under compatible BIOS as if\r
- * it was a native mouse (e.g. PS/2).\r
- * \r
- * On start-up the system will automatically enumerate and function\r
- * as a mouse when the USB connection to a host is present. To use\r
- * the mouse, move the joystick to move the pointer, and push the\r
- * joystick inwards to simulate a left-button click. The HWB serves as\r
- * the right mouse button.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td>\r
- * None\r
- * </td>\r
- * </tr>\r
- * </table>\r
- */\r
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = Mouse\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c \\r
- \r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-#CFLAGS += -mshort-calls\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
- \r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x02,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x204C,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .CCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0xFF,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC_Functional_Header = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x00,\r
- \r
- .Data = {0x01, 0x10}\r
- },\r
- \r
- .CDC_Functional_CallManagement= \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x01,\r
- \r
- .Data = {0x00, 0x00}\r
- },\r
- \r
- .CDC_Functional_AbstractControlManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
- .SubType = 0x02,\r
- \r
- .Data = {0x00}\r
- },\r
- \r
- .CDC_Functional_Union = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x06,\r
- \r
- .Data = {0x00, 0x01}\r
- },\r
-\r
- .ManagementEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- .PollingIntervalMS = 0x02\r
- },\r
-\r
- .DCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x0A,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .DataOutEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
- \r
- .DataInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA RNDIS CDC Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device:\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String:\r
- switch (DescriptorNumber)\r
- {\r
- case 0x00:\r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01:\r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02:\r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
-\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h>\r
-\r
- #include <avr/pgmspace.h>\r
-\r
- /* Macros: */\r
- /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
- * uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
- * a single typedef struct. A macro is used instead so that functional descriptors can be created\r
- * easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
- *\r
- * \param DataSize Size in bytes of the CDC functional descriptor's data payload\r
- */ \r
- #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \\r
- struct \\r
- { \\r
- USB_Descriptor_Header_t Header; \\r
- uint8_t SubType; \\r
- uint8_t Data[DataSize]; \\r
- }\r
-\r
- /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
- #define CDC_NOTIFICATION_EPNUM 3\r
-\r
- /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
- #define CDC_TX_EPNUM 1 \r
-\r
- /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
- #define CDC_RX_EPNUM 2 \r
-\r
- /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
- #define CDC_NOTIFICATION_EPSIZE 8\r
-\r
- /** Size in bytes of the CDC data IN and OUT endpoints. */\r
- #define CDC_TXRX_EPSIZE 64\r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t CCI_Interface;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Header;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
- USB_Descriptor_Endpoint_t ManagementEndpoint;\r
- USB_Descriptor_Interface_t DCI_Interface;\r
- USB_Descriptor_Endpoint_t DataOutEndpoint;\r
- USB_Descriptor_Endpoint_t DataInEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - RNDIS Ethernet Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-; Windows LUFA RNDIS Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version]\r
-Signature = "$Windows NT$"\r
-Class = Net\r
-ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}\r
-Provider = %COMPANY%\r
-DriverVer = 06/21/2006,6.0.6000.16384\r
-;CatalogFile = device.cat\r
-\r
-[Manufacturer]\r
-%COMPANY% = RndisDevices,NTx86,NTamd64,NTia64\r
-\r
-; Decoration for x86 architecture\r
-[RndisDevices.NTx86]\r
-%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
-\r
-; Decoration for x64 architecture\r
-[RndisDevices.NTamd64]\r
-%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
-\r
-; Decoration for ia64 architecture\r
-[RndisDevices.NTia64]\r
-%RNDISDEV% = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
-\r
-;@@@ This is the common setting for setup\r
-[ControlFlags]\r
-ExcludeFromSelect=*\r
-\r
-; DDInstall section\r
-; References the in-build Netrndis.inf\r
-[RNDIS.NT.5.1]\r
-Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI\r
-BusType = 15\r
-; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF\r
-include = netrndis.inf\r
-needs = Usb_Rndis.ndi\r
-AddReg = Rndis_AddReg_Vista\r
-\r
-; DDInstal.Services section\r
-[RNDIS.NT.5.1.Services]\r
-include = netrndis.inf\r
-needs = Usb_Rndis.ndi.Services\r
-\r
-; No sys copyfiles - the sys files are already in-build \r
-; (part of the operating system).\r
-\r
-; Modify these strings for your device as needed.\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-RNDISDEV="LUFA USB RNDIS Demo"
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Address Resolution Protocol (ARP) packet handling routines. This protocol handles the\r
- * conversion of physical MAC addresses to protocol IP addresses between the host and the\r
- * device.\r
- */\r
- \r
-#include "ARP.h"\r
-\r
-/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response\r
- * to the output Ethernet frame if the host is requesting the IP or MAC address of the\r
- * virtual server device on the network.\r
- *\r
- * \param InDataStart Pointer to the start of the incoming packet's ARP header\r
- * \param OutDataStart Pointer to the start of the outgoing packet's ARP header\r
- *\r
- * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart)\r
-{\r
- DecodeARPHeader(InDataStart);\r
-\r
- ARP_Header_t* ARPHeaderIN = (ARP_Header_t*)InDataStart;\r
- ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart;\r
-\r
- /* Ensure that the ARP request is a IPv4 request packet */\r
- if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) &&\r
- (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))\r
- {\r
- /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */\r
- if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || \r
- MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))\r
- {\r
- /* Fill out the ARP response header */\r
- ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType;\r
- ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType;\r
- ARPHeaderOUT->HLEN = ARPHeaderIN->HLEN;\r
- ARPHeaderOUT->PLEN = ARPHeaderIN->PLEN;\r
- ARPHeaderOUT->Operation = SwapEndian_16(ARP_OPERATION_REPLY);\r
-\r
- /* Copy over the sender MAC/IP to the target fields for the response */\r
- ARPHeaderOUT->THA = ARPHeaderIN->SHA;\r
- ARPHeaderOUT->TPA = ARPHeaderIN->SPA;\r
-\r
- /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */\r
- ARPHeaderOUT->SHA = ServerMACAddress;\r
- ARPHeaderOUT->SPA = ServerIPAddress;\r
-\r
- /* Return the size of the response so far */\r
- return sizeof(ARP_Header_t);\r
- }\r
- }\r
- \r
- return NO_RESPONSE;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ARP.c.\r
- */\r
- \r
-#ifndef _ARP_H_\r
-#define _ARP_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <string.h>
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- #include "ProtocolDecoders.h"\r
- \r
- /* Macros: */\r
- /** ARP header operation constant, indicating a request from a host for an address translation */\r
- #define ARP_OPERATION_REQUEST 1\r
-\r
- /** ARP header operation constant, indicating a reply from a host giving an address translation */\r
- #define ARP_OPERATION_REPLY 2\r
-\r
- /* Type Defines: */\r
- /** Type define for an ARP packet inside an Ethernet frame. */\r
- typedef struct\r
- {\r
- uint16_t HardwareType; /**< Hardware type constant, indicating the hardware used */\r
- uint16_t ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */\r
- \r
- uint8_t HLEN; /**< Length in bytes of the source/destination hardware addresses */\r
- uint8_t PLEN; /**< Length in bytes of the source/destination protocol addresses */\r
- uint16_t Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */\r
- \r
- MAC_Address_t SHA; /**< Sender's hardware address */\r
- IP_Address_t SPA; /**< Sender's protocol address */\r
- MAC_Address_t THA; /**< Target's hardware address */\r
- IP_Address_t TPA; /**< Target's protocol address */\r
- } ARP_Header_t;\r
- \r
- /* Function Prototypes: */\r
- int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol\r
- * handles the automatic IP negotiation to the host, so that the host will use the provided\r
- * IP address given to it by the device.\r
- */\r
- \r
-#include "DHCP.h"\r
-\r
-/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response\r
- * to the output Ethernet frame if the host is requesting or accepting an IP address.\r
- *\r
- * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
- * \param DHCPHeaderInStart Pointer to the start of the incoming packet's DHCP header\r
- * \param DHCPHeaderOutStart Pointer to the start of the outgoing packet's DHCP header\r
- *\r
- * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart)\r
-{\r
- IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart;\r
- DHCP_Header_t* DHCPHeaderIN = (DHCP_Header_t*)DHCPHeaderInStart;\r
- DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;\r
- \r
- uint8_t* DHCPOptionsINStart = (uint8_t*)(DHCPHeaderInStart + sizeof(DHCP_Header_t));\r
- uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));\r
-\r
- DecodeDHCPHeader(DHCPHeaderInStart);\r
-\r
- /* Zero out the response DHCP packet, as much of it legacy and left at 0 */\r
- memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t));\r
-\r
- /* Fill out the response DHCP packet */\r
- DHCPHeaderOUT->HardwareType = DHCPHeaderIN->HardwareType;\r
- DHCPHeaderOUT->Operation = DHCP_OP_BOOTREPLY;\r
- DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength;\r
- DHCPHeaderOUT->Hops = 0;\r
- DHCPHeaderOUT->TransactionID = DHCPHeaderIN->TransactionID;\r
- DHCPHeaderOUT->ElapsedSeconds = 0;\r
- DHCPHeaderOUT->Flags = DHCPHeaderIN->Flags;\r
- DHCPHeaderOUT->YourIP = ClientIPAddress;\r
- memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));\r
- DHCPHeaderOUT->Cookie = SwapEndian_32(DHCP_MAGIC_COOKIE);\r
- \r
- /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that\r
- when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */\r
- IPHeaderIN->SourceAddress = ClientIPAddress;\r
- IPHeaderIN->DestinationAddress = ServerIPAddress;\r
-\r
- /* Process the incoming DHCP packet options */\r
- while (DHCPOptionsINStart[0] != DHCP_OPTION_END)\r
- { \r
- /* Find the Message Type DHCP option, to determine the type of DHCP packet */\r
- if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)\r
- {\r
- if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST))\r
- {\r
- /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */\r
-\r
- *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE;\r
- *(DHCPOptionsOUTStart++) = 1;\r
- *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER\r
- : DHCP_MESSAGETYPE_ACK;\r
-\r
- *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;\r
- *(DHCPOptionsOUTStart++) = 4;\r
- *(DHCPOptionsOUTStart++) = 0xFF;\r
- *(DHCPOptionsOUTStart++) = 0xFF;\r
- *(DHCPOptionsOUTStart++) = 0xFF;\r
- *(DHCPOptionsOUTStart++) = 0x00;\r
-\r
- *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER;\r
- *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);\r
- memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t));\r
- DHCPOptionsOUTStart += sizeof(IP_Address_t);\r
-\r
- *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;\r
- \r
- return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));\r
- }\r
- }\r
- \r
- /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */\r
- DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));\r
- }\r
- \r
- return NO_RESPONSE;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for DHCP.c.\r
- */\r
- \r
-#ifndef _DHCP_H_\r
-#define _DHCP_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <string.h>\r
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- #include "ProtocolDecoders.h"\r
-\r
- /* Macros: */\r
- /** DHCP operation constant, indicating a request from a host to a DHCP server */\r
- #define DHCP_OP_BOOTREQUEST 0x01\r
-\r
- /** DHCP operation constant, indicating a reply from a DHCP server to a host */\r
- #define DHCP_OP_BOOTREPLY 0x02\r
- \r
- /** Hardware type constant, indicating Ethernet as a carrier */\r
- #define DHCP_HTYPE_ETHERNET 0x01\r
- \r
- /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP) */\r
- #define DHCP_MAGIC_COOKIE 0x63825363\r
- \r
- /** DHCP option list entry header, indicating that a subnet mask will follow */\r
- #define DHCP_OPTION_SUBNETMASK 1\r
-\r
- /** DHCP option list entry header, indicating that the DHCP message type constant will follow */\r
- #define DHCP_OPTION_MESSAGETYPE 53\r
-\r
- /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow */\r
- #define DHCP_OPTION_DHCPSERVER 54\r
-\r
- /** DHCP option list entry header, used to pad out option data */\r
- #define DHCP_OPTION_PAD 0\r
-\r
- /** DHCP option list entry header, indicating the end of option data */\r
- #define DHCP_OPTION_END 255\r
- \r
- /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address */\r
- #define DHCP_MESSAGETYPE_DISCOVER 1\r
-\r
- /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address */\r
- #define DHCP_MESSAGETYPE_OFFER 2\r
-\r
- /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address */\r
- #define DHCP_MESSAGETYPE_REQUEST 3\r
-\r
- /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease */\r
- #define DHCP_MESSAGETYPE_DECLINE 4\r
-\r
- /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request */\r
- #define DHCP_MESSAGETYPE_ACK 5\r
-\r
- /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request */\r
- #define DHCP_MESSAGETYPE_NACK 6\r
-\r
- /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address */\r
- #define DHCP_MESSAGETYPE_RELEASE 7\r
-\r
- /* Type Defines: */\r
- /** Type define for a DHCP packet inside an Ethernet frame. */\r
- typedef struct\r
- {\r
- uint8_t Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */\r
- uint8_t HardwareType; /**< Hardware carrier type constant */\r
- uint8_t HardwareAddressLength; /**< Length in bytes of a hardware (MAC) address on the network */\r
- uint8_t Hops; /**< Number of hops required to reach the server, unused */\r
-\r
- uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */\r
-\r
- uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */\r
- uint16_t Flags; /**< BOOTP packet flags */\r
- \r
- IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */\r
- IP_Address_t YourIP; /**< Client IP address */\r
- IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
- IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
- \r
- uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */\r
- uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
- uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
- \r
- uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */\r
- } DHCP_Header_t;\r
-\r
- /* Function Prototypes: */\r
- int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet\r
- * frames sent and received, deferring the processing of subpacket protocols to the appropriate\r
- * protocol handlers, such as DHCP or ARP.\r
- */\r
- \r
-#include "Ethernet.h"\r
-\r
-/* Global Variables: */\r
-/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
-const MAC_Address_t ServerMACAddress = {SERVER_MAC_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */\r
-const IP_Address_t ServerIPAddress = {SERVER_IP_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */\r
-const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */\r
-const IP_Address_t BroadcastIPAddress = {BROADCAST_IP_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */\r
-const IP_Address_t ClientIPAddress = {CLIENT_IP_ADDRESS};\r
-\r
-\r
-/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
- * frame buffer if the sub protocol handlers create a valid response.\r
- */\r
-void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT)\r
-{\r
- DecodeEthernetFrameHeader(FrameIN->FrameData);\r
-\r
- /* Cast the incoming Ethernet frame to the Ethernet header type */\r
- Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;\r
- Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;\r
- \r
- int16_t RetSize = NO_RESPONSE;\r
- \r
- /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
- if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
- MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)))\r
- {\r
- /* Process the packet depending on its protocol */\r
- switch (SwapEndian_16(FrameINHeader->EtherType))\r
- {\r
- case ETHERTYPE_ARP:\r
- RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
- &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
- break; \r
- case ETHERTYPE_IPV4:\r
- RetSize = IP_ProcessIPPacket(FrameIN,\r
- &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
- &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
- break;\r
- }\r
- \r
- /* Protocol processing routine has filled a response, complete the ethernet frame header */\r
- if (RetSize > 0)\r
- {\r
- /* Fill out the response Ethernet frame header */\r
- FrameOUTHeader->Source = ServerMACAddress;\r
- FrameOUTHeader->Destination = FrameINHeader->Source;\r
- FrameOUTHeader->EtherType = FrameINHeader->EtherType;\r
- \r
- /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
- FrameOUT->FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
- FrameOUT->FrameInBuffer = true;\r
- }\r
- }\r
-\r
- /* Check if the packet was processed */\r
- if (RetSize != NO_PROCESS)\r
- {\r
- /* Clear the frame buffer */\r
- FrameIN->FrameInBuffer = false;\r
- }\r
-}\r
-\r
-/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's\r
- * compliment of each word, complimented.\r
- *\r
- * \param Data Pointer to the packet buffer data whose checksum must be calculated\r
- * \param Bytes Number of bytes in the data buffer to process\r
- *\r
- * \return A 16-bit Ethernet checksum value\r
- */\r
-uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes)\r
-{\r
- uint16_t* Words = (uint16_t*)Data;\r
- uint32_t Checksum = 0;\r
-\r
- for (uint8_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)\r
- Checksum += Words[CurrWord];\r
- \r
- while (Checksum & 0xFFFF0000)\r
- Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
- \r
- return ~Checksum;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Ethernet.c.\r
- */\r
- \r
-#ifndef _ETHERNET_H_\r
-#define _ETHERNET_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <string.h>\r
- \r
- #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
-\r
- #include "EthernetProtocols.h"\r
- #include "ProtocolDecoders.h"\r
- #include "ICMP.h"\r
- #include "TCP.h"\r
- #include "UDP.h"\r
- #include "DHCP.h"\r
- #include "ARP.h"\r
- #include "IP.h"\r
- \r
- /* Macros: */\r
- /** Physical MAC address of the USB RNDIS network adapter */\r
- #define ADAPTER_MAC_ADDRESS {0x00, 0x02, 0x00, 0x02, 0x00, 0x02} \r
-\r
- /** Physical MAC address of the virtual server on the network */\r
- #define SERVER_MAC_ADDRESS {0x00, 0x01, 0x00, 0x01, 0x00, 0x01} \r
-\r
- /** Physical MAC address of the network broadcast address */\r
- #define BROADCAST_MAC_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
- \r
- /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
- * \r
- * \param MAC1 First MAC address\r
- * \param MAC2 Second MAC address\r
- *\r
- * \return True if the addresses match, false otherwise\r
- */\r
- #define MAC_COMPARE(MAC1, MAC2) (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
- \r
- /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
- #define NO_RESPONSE 0 \r
-\r
- /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
- #define NO_PROCESS -1\r
-\r
- /* Type Defines: */\r
- /** Type define for an Ethernet frame header */\r
- typedef struct\r
- {\r
- MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
- MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
- \r
- union\r
- {\r
- uint16_t EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
- uint16_t Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
- };\r
- } Ethernet_Frame_Header_t;\r
- \r
- /* External Variables: */\r
- extern const MAC_Address_t ServerMACAddress;\r
- extern const IP_Address_t ServerIPAddress;\r
- extern const MAC_Address_t BroadcastMACAddress;\r
- extern const IP_Address_t BroadcastIPAddress;\r
- extern const IP_Address_t ClientIPAddress;\r
- \r
- /* Function Prototypes: */\r
- void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT);\r
- uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
- \r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * General Ethernet protocol constants and type defines, for use by\r
- * all network protocol portions of the TCP/IP stack.\r
- */\r
-\r
-#ifndef _ETHERNET_PROTOCOLS_H_\r
-#define _ETHERNET_PROTOCOLS_H_\r
-\r
- /* Macros: */\r
- #define ETHERTYPE_IPV4 0x0800\r
- #define ETHERTYPE_ARP 0x0806\r
- #define ETHERTYPE_RARP 0x8035\r
- #define ETHERTYPE_APPLETALK 0x809b\r
- #define ETHERTYPE_APPLETALKARP 0x80f3\r
- #define ETHERTYPE_IEEE8021Q 0x8100\r
- #define ETHERTYPE_NOVELLIPX 0x8137\r
- #define ETHERTYPE_NOVELL 0x8138\r
- #define ETHERTYPE_IPV6 0x86DD\r
- #define ETHERTYPE_COBRANET 0x8819\r
- #define ETHERTYPE_PROVIDERBRIDGING 0x88a8\r
- #define ETHERTYPE_MPLSUNICAST 0x8847\r
- #define ETHERTYPE_MPLSMULTICAST 0x8848\r
- #define ETHERTYPE_PPPoEDISCOVERY 0x8863\r
- #define ETHERTYPE_PPPoESESSION 0x8864\r
- #define ETHERTYPE_EAPOVERLAN 0x888E\r
- #define ETHERTYPE_HYPERSCSI 0x889A\r
- #define ETHERTYPE_ATAOVERETHERNET 0x88A2\r
- #define ETHERTYPE_ETHERCAT 0x88A4\r
- #define ETHERTYPE_SERCOSIII 0x88CD\r
- #define ETHERTYPE_CESoE 0x88D8\r
- #define ETHERTYPE_MACSECURITY 0x88E5\r
- #define ETHERTYPE_FIBRECHANNEL 0x8906\r
- #define ETHERTYPE_QINQ 0x9100\r
- #define ETHERTYPE_VLLT 0xCAFE\r
- \r
- #define PROTOCOL_ICMP 1\r
- #define PROTOCOL_IGMP 2\r
- #define PROTOCOL_TCP 6\r
- #define PROTOCOL_UDP 17\r
- #define PROTOCOL_OSPF 89\r
- #define PROTOCOL_SCTP 132\r
-\r
- /* Type Defines: */ \r
- /** Type define for a protocol IP address of a device on a network */\r
- typedef struct\r
- {\r
- uint8_t Octets[4]; /**< Individual bytes of an IP address */\r
- } IP_Address_t;\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles\r
- * Echo requests from the host, to indicate a successful network connection between the host\r
- * and the virtual server.\r
- */\r
- \r
-#include "ICMP.h"\r
-\r
-/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response\r
- * to the output Ethernet frame if the host is issuing a ICMP ECHO request.\r
- *\r
- * \param FrameIN Pointer to the incomming Ethernet frame information structure\r
- * \param InDataStart Pointer to the start of the incoming packet's ICMP header\r
- * \param OutDataStart Pointer to the start of the outgoing packet's ICMP header\r
- *\r
- * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
-{\r
- ICMP_Header_t* ICMPHeaderIN = (ICMP_Header_t*)InDataStart;\r
- ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart;\r
-\r
- DecodeICMPHeader(InDataStart);\r
-\r
- /* Determine if the ICMP packet is an echo request (ping) */\r
- if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST)\r
- {\r
- /* Fill out the ICMP response packet */\r
- ICMPHeaderOUT->Type = ICMP_TYPE_ECHOREPLY;\r
- ICMPHeaderOUT->Code = 0;\r
- ICMPHeaderOUT->Checksum = 0;\r
- ICMPHeaderOUT->Id = ICMPHeaderIN->Id;\r
- ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;\r
- \r
- uint16_t DataSize = FrameIN->FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN->FrameData));\r
- \r
- /* Copy the remaining payload to the response - echo requests should echo back any sent data */\r
- memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],\r
- &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],\r
- DataSize);\r
-\r
- ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));\r
-\r
- /* Return the size of the response so far */\r
- return (DataSize + sizeof(ICMP_Header_t));\r
- }\r
- \r
- return NO_RESPONSE;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ICMP.c.\r
- */\r
-\r
-#ifndef _ICMP_H_\r
-#define _ICMP_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <string.h>\r
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- #include "ProtocolDecoders.h"\r
- \r
- /* Macros: */\r
- /** ICMP message type constant, indicating an ICMP ECHO Reply message */\r
- #define ICMP_TYPE_ECHOREPLY 0\r
-\r
- /** ICMP message type constant, indicating a packet destination is unreachable */\r
- #define ICMP_TYPE_DESTINATIONUNREACHABLE 3\r
- \r
- /** ICMP message type constant, indicating an ICMP Source Quench message */\r
- #define ICMP_TYPE_SOURCEQUENCH 4\r
-\r
- /** ICMP message type constant, indicating an ICMP Redirect message */\r
- #define ICMP_TYPE_REDIRECTMESSAGE 5\r
-\r
- /** ICMP message type constant, indicating an ICMP ECHO Request message */\r
- #define ICMP_TYPE_ECHOREQUEST 8\r
-\r
- /** ICMP message type constant, indicating an ICMP Time Exceeded message */\r
- #define ICMP_TYPE_TIMEEXCEEDED 11\r
- \r
- /* Type Defines: */\r
- /** Type define for an ICMP message header. */\r
- typedef struct\r
- {\r
- uint8_t Type; /**< ICMP message type, a ICMP_TYPE_* constant */\r
- uint8_t Code; /**< ICMP message code, indicating the message value */\r
- uint16_t Checksum; /**< Ethernet checksum of the ICMP message */\r
- uint16_t Id; /**< Id of the ICMP message */\r
- uint16_t Sequence; /**< Sequence number of the ICMP message, to link together message responses */\r
- } ICMP_Header_t;\r
- \r
- /* Function Prototypes: */\r
- int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the\r
- * host which typically encapsulate other protocols such as ICMP, UDP and TCP.\r
- */\r
- \r
-#include "IP.h"\r
-\r
-/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response\r
- * to the output Ethernet frame if one is created by a subprotocol handler.\r
- *\r
- * \param FrameIN Pointer to the incomming Ethernet frame information structure\r
- * \param InDataStart Pointer to the start of the incoming packet's IP header\r
- * \param OutDataStart Pointer to the start of the outgoing packet's IP header\r
- *\r
- * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
- * response was generated, NO_PROCESS if the packet processing was deferred until the\r
- * next Ethernet packet handler iteration\r
- */\r
-int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
-{\r
- DecodeIPHeader(InDataStart);\r
-\r
- IP_Header_t* IPHeaderIN = (IP_Header_t*)InDataStart;\r
- IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart;\r
-\r
- /* Header length is specified in number of longs in the packet header, convert to bytes */\r
- uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
-\r
- int16_t RetSize = NO_RESPONSE;\r
-\r
- /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */\r
- if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) &&\r
- !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress)))\r
- {\r
- return NO_RESPONSE;\r
- }\r
- \r
- /* Pass off the IP payload to the appropriate protocol processing routine */\r
- switch (IPHeaderIN->Protocol)\r
- {\r
- case PROTOCOL_ICMP:\r
- RetSize = ICMP_ProcessICMPPacket(FrameIN,\r
- &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
- &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);\r
- break;\r
- case PROTOCOL_TCP:\r
- RetSize = TCP_ProcessTCPPacket(InDataStart,\r
- &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
- &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); \r
- break;\r
- case PROTOCOL_UDP:\r
- RetSize = UDP_ProcessUDPPacket(InDataStart,\r
- &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
- &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); \r
- break;\r
- }\r
- \r
- /* Check to see if the protocol processing routine has filled out a response */\r
- if (RetSize > 0)\r
- {\r
- /* Fill out the response IP packet header */\r
- IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + RetSize);\r
- IPHeaderOUT->TypeOfService = 0;\r
- IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
- IPHeaderOUT->Version = 4;\r
- IPHeaderOUT->Flags = 0;\r
- IPHeaderOUT->FragmentOffset = 0;\r
- IPHeaderOUT->Identification = 0;\r
- IPHeaderOUT->HeaderChecksum = 0;\r
- IPHeaderOUT->Protocol = IPHeaderIN->Protocol;\r
- IPHeaderOUT->TTL = DEFAULT_TTL;\r
- IPHeaderOUT->SourceAddress = IPHeaderIN->DestinationAddress;\r
- IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;\r
- \r
- IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
- \r
- /* Return the size of the response so far */\r
- return (sizeof(IP_Header_t) + RetSize);\r
- }\r
- \r
- return RetSize;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for IP.c.\r
- */\r
- \r
-#ifndef _IP_H_\r
-#define _IP_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <string.h>\r
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- #include "ProtocolDecoders.h"\r
- \r
- /* Macros: */\r
- /** Protocol IP address of the host (client) machine, once assigned by DHCP */\r
- #define CLIENT_IP_ADDRESS { 10, 0, 0, 1}\r
-\r
- /** Protocol IP address of the virtual server machine */\r
- #define SERVER_IP_ADDRESS { 10, 0, 0, 2}\r
-\r
- /** Protocol IP address of the broadcast address */\r
- #define BROADCAST_IP_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF}\r
-\r
- /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination is reached */\r
- #define DEFAULT_TTL 128\r
- \r
- /** Performs a comparison between two IP addresses, indicating if they are identical.\r
- * \r
- * \param IP1 First IP address\r
- * \param IP2 Second IP address\r
- *\r
- * \return True if the addresses match, false otherwise\r
- */\r
- #define IP_COMPARE(IP1, IP2) (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)\r
- \r
- /* Type Defines: */\r
- /** Type define of an IP packet header. */\r
- typedef struct\r
- {\r
- unsigned char HeaderLength : 4; /**< Total length of the packet header, in 4-byte blocks */\r
- unsigned char Version : 4; /**< IP protocol version */\r
- uint8_t TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */\r
- uint16_t TotalLength; /**< Total length of the IP packet, in bytes */\r
-\r
- uint16_t Identification; /**< Identification value for identifying fragmented packets */\r
- unsigned int FragmentOffset : 13; /**< Offset of this IP fragment */\r
- unsigned int Flags : 3; /**< Fragment flags, to indicate if a packet is fragmented */\r
-\r
- uint8_t TTL; /**< Maximum allowable number of hops to reach the packet destination */\r
- uint8_t Protocol; /**< Encapsulated protocol type */\r
- uint16_t HeaderChecksum; /**< Ethernet checksum of the IP header */\r
- \r
- IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */\r
- IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */\r
- } IP_Header_t;\r
- \r
- /* Function Prototypes: */\r
- int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines\r
- accepts a header to the appropriate protocol and prints out pertinent information\r
- on the packet through the serial port.\r
- \r
- To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}\r
- in the project makefile, and pass it to the compiler using the -D switch.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes.\r
- * Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human\r
- * readable format.\r
- *\r
- * Note that the USART is a slow transmission medium, and will slow down packet processing considerably.\r
- * Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile\r
- * and passing it to the compiler via the -D switch.\r
- */\r
- \r
-#include "ProtocolDecoders.h"\r
-\r
-/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of an Ethernet frame header\r
- */\r
-void DecodeEthernetFrameHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_ETHERNET)\r
- Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;\r
- \r
- printf_P(PSTR("\r\n"));\r
- \r
- printf_P(PSTR(" ETHERNET\r\n"));\r
- printf_P(PSTR(" + Frame Size: %u\r\n"), FrameIN.FrameLength);\r
-\r
- if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) &&\r
- !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress)))\r
- {\r
- printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
- return;\r
- }\r
-\r
- printf_P(PSTR(" + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0],\r
- FrameHeader->Source.Octets[1],\r
- FrameHeader->Source.Octets[2],\r
- FrameHeader->Source.Octets[3],\r
- FrameHeader->Source.Octets[4],\r
- FrameHeader->Source.Octets[5]);\r
-\r
- printf_P(PSTR(" + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Destination.Octets[0],\r
- FrameHeader->Destination.Octets[1],\r
- FrameHeader->Destination.Octets[2],\r
- FrameHeader->Destination.Octets[3],\r
- FrameHeader->Destination.Octets[4],\r
- FrameHeader->Destination.Octets[5]);\r
-\r
- if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)\r
- printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));\r
- else\r
- printf_P(PSTR(" + Protocol: UNKNOWN E1\r\n"));\r
- #endif\r
-}\r
-\r
-/** Decodes an ARP header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of an ARP packet header\r
- */\r
-void DecodeARPHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_ARP)\r
- ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart; \r
-\r
- printf_P(PSTR(" \\\r\n ARP\r\n"));\r
-\r
- if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) &&\r
- !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))\r
- {\r
- printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
- return; \r
- }\r
-\r
- printf_P(PSTR(" + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));\r
- printf_P(PSTR(" + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));\r
- \r
- if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)\r
- {\r
- printf_P(PSTR(" + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],\r
- ARPHeader->SHA.Octets[1],\r
- ARPHeader->SHA.Octets[2],\r
- ARPHeader->SHA.Octets[3],\r
- ARPHeader->SHA.Octets[4],\r
- ARPHeader->SHA.Octets[5]);\r
-\r
- printf_P(PSTR(" + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0],\r
- ARPHeader->SPA.Octets[1],\r
- ARPHeader->SPA.Octets[2],\r
- ARPHeader->SPA.Octets[3]);\r
-\r
- printf_P(PSTR(" + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0],\r
- ARPHeader->THA.Octets[1],\r
- ARPHeader->THA.Octets[2],\r
- ARPHeader->THA.Octets[3],\r
- ARPHeader->THA.Octets[4],\r
- ARPHeader->THA.Octets[5]);\r
-\r
- printf_P(PSTR(" + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0],\r
- ARPHeader->TPA.Octets[1],\r
- ARPHeader->TPA.Octets[2],\r
- ARPHeader->TPA.Octets[3]);\r
- }\r
- #endif\r
-}\r
-\r
-/** Decodes an IP header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of an IP packet header\r
- */\r
-void DecodeIPHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_IP)\r
- IP_Header_t* IPHeader = (IP_Header_t*)InDataStart;\r
-\r
- uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t));\r
-\r
- printf_P(PSTR(" \\\r\n IP\r\n"));\r
-\r
- if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress)))\r
- {\r
- printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n"));\r
- return;\r
- }\r
-\r
- printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
- printf_P(PSTR(" + Packet Version: %u\r\n"), IPHeader->Version);\r
- printf_P(PSTR(" + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));\r
- \r
- printf_P(PSTR(" + Protocol: %u\r\n"), IPHeader->Protocol);\r
- printf_P(PSTR(" + TTL: %u\r\n"), IPHeader->TTL);\r
- \r
- printf_P(PSTR(" + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],\r
- IPHeader->SourceAddress.Octets[1],\r
- IPHeader->SourceAddress.Octets[2],\r
- IPHeader->SourceAddress.Octets[3]); \r
-\r
- printf_P(PSTR(" + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],\r
- IPHeader->DestinationAddress.Octets[1],\r
- IPHeader->DestinationAddress.Octets[2],\r
- IPHeader->DestinationAddress.Octets[3]);\r
- #endif\r
-}\r
-\r
-/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of an ICMP packet header\r
- */\r
-void DecodeICMPHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_ICMP)\r
- ICMP_Header_t* ICMPHeader = (ICMP_Header_t*)InDataStart;\r
-\r
- printf_P(PSTR(" \\\r\n ICMP\r\n"));\r
-\r
- printf_P(PSTR(" + Type: %u\r\n"), ICMPHeader->Type);\r
- printf_P(PSTR(" + Code: %u\r\n"), ICMPHeader->Code);\r
- #endif\r
-}\r
-\r
-/** Decodes a TCP header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of a TCP packet header\r
- */\r
-void DecodeTCPHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_TCP)\r
- TCP_Header_t* TCPHeader = (TCP_Header_t*)InDataStart;\r
-\r
- uint16_t HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t));\r
-\r
- printf_P(PSTR(" \\\r\n TCP\r\n"));\r
-\r
- printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
-\r
- printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort));\r
- printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort));\r
-\r
- printf_P(PSTR(" + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));\r
- printf_P(PSTR(" + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));\r
- \r
- printf_P(PSTR(" + Flags: 0x%02X\r\n"), TCPHeader->Flags);\r
- \r
- if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)\r
- printf_P(PSTR(" + NOT LISTENING ON DESTINATION PORT\r\n"));\r
- #endif\r
-}\r
-\r
-/** Decodes an UDP header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of a UDP packet header\r
- */\r
-void DecodeUDPHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_UDP)\r
- UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart;\r
-\r
- printf_P(PSTR(" \\\r\n UDP\r\n"));\r
-\r
- printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort));\r
- printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort));\r
-\r
- printf_P(PSTR(" + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length));\r
- #endif\r
-}\r
-\r
-/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.\r
- *\r
- * \param InDataStart Pointer to the start of a DHCP packet header\r
- */\r
-void DecodeDHCPHeader(void* InDataStart)\r
-{\r
- #if !defined(NO_DECODE_DHCP)\r
- uint8_t* DHCPOptions = (InDataStart + sizeof(DHCP_Header_t));\r
-\r
- printf_P(PSTR(" \\\r\n DHCP\r\n"));\r
-\r
- while (DHCPOptions[0] != DHCP_OPTION_END)\r
- {\r
- if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE)\r
- {\r
- switch (DHCPOptions[2])\r
- {\r
- case DHCP_MESSAGETYPE_DISCOVER:\r
- printf_P(PSTR(" + DISCOVER\r\n"));\r
- break;\r
- case DHCP_MESSAGETYPE_REQUEST:\r
- printf_P(PSTR(" + REQUEST\r\n"));\r
- break;\r
- case DHCP_MESSAGETYPE_RELEASE:\r
- printf_P(PSTR(" + RELEASE\r\n"));\r
- break;\r
- case DHCP_MESSAGETYPE_DECLINE:\r
- printf_P(PSTR(" + DECLINE\r\n"));\r
- break;\r
- }\r
- }\r
- \r
- DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));\r
- }\r
-\r
- #endif\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ProtocolDecoders.c.\r
- */\r
-\r
-#ifndef _PROTOCOL_DECODERS_H_\r
-#define _PROTOCOL_DECODERS_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- \r
- #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- \r
- /* Function Prototypes: */\r
- void DecodeEthernetFrameHeader(void* InDataStart);\r
- void DecodeARPHeader(void* InDataStart);\r
- void DecodeIPHeader(void* InDataStart);\r
- void DecodeICMPHeader(void* InDataStart);\r
- void DecodeTCPHeader(void* InDataStart);\r
- void DecodeUDPHeader(void* InDataStart);\r
- void DecodeDHCPHeader(void* InDataStart);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission\r
- * and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data\r
- * delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.\r
- */\r
- \r
-#define INCLUDE_FROM_TCP_C\r
-#include "TCP.h"\r
-\r
-/* Global Variables: */\r
-/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are\r
- * stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This\r
- * allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired.\r
- */\r
-TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
-\r
-/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active\r
- * (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections\r
- * not present in the array are closed.\r
- */\r
-TCP_ConnectionState_t ConnectionStateTable[MAX_TCP_CONNECTIONS];\r
-\r
-\r
-/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application\r
- * level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
- * buffer for later transmission.\r
- */\r
-void TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
-{\r
- /* Task to hand off TCP packets to and from the listening applications. */\r
-\r
- /* Run each application in sequence, to process incoming and generate outgoing packets */\r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- {\r
- /* Find the corresponding port entry in the port table */\r
- for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
- {\r
- /* Run the application handler for the port */\r
- if ((PortStateTable[PTableEntry].Port == ConnectionStateTable[CSTableEntry].Port) && \r
- (PortStateTable[PTableEntry].State == TCP_Port_Open))\r
- {\r
- PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], &ConnectionStateTable[CSTableEntry].Info.Buffer);\r
- }\r
- }\r
- }\r
- \r
- /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */\r
- if (RNDISInterfaceInfo->FrameOUT.FrameInBuffer)\r
- return;\r
- \r
- /* Send response packets from each application as the TCP packet buffers are filled by the applications */\r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- {\r
- /* For each completely received packet, pass it along to the listening application */\r
- if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) &&\r
- (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready))\r
- {\r
- Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData;\r
- IP_Header_t* IPHeaderOUT = (IP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)];\r
- TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
- sizeof(IP_Header_t)]; \r
- void* TCPDataOUT = &RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
- sizeof(IP_Header_t) +\r
- sizeof(TCP_Header_t)];\r
-\r
- uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length;\r
-\r
- /* Fill out the TCP data */\r
- TCPHeaderOUT->SourcePort = ConnectionStateTable[CSTableEntry].Port;\r
- TCPHeaderOUT->DestinationPort = ConnectionStateTable[CSTableEntry].RemotePort;\r
- TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut);\r
- TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn);\r
- TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
- TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE);\r
-\r
- TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
- TCPHeaderOUT->UrgentPointer = 0;\r
- TCPHeaderOUT->Checksum = 0;\r
- TCPHeaderOUT->Reserved = 0;\r
-\r
- memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);\r
- \r
- ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;\r
-\r
- TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,\r
- ConnectionStateTable[CSTableEntry].RemoteAddress,\r
- (sizeof(TCP_Header_t) + PacketSize));\r
-\r
- PacketSize += sizeof(TCP_Header_t);\r
-\r
- /* Fill out the response IP header */\r
- IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + PacketSize);\r
- IPHeaderOUT->TypeOfService = 0;\r
- IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
- IPHeaderOUT->Version = 4;\r
- IPHeaderOUT->Flags = 0;\r
- IPHeaderOUT->FragmentOffset = 0;\r
- IPHeaderOUT->Identification = 0;\r
- IPHeaderOUT->HeaderChecksum = 0;\r
- IPHeaderOUT->Protocol = PROTOCOL_TCP;\r
- IPHeaderOUT->TTL = DEFAULT_TTL;\r
- IPHeaderOUT->SourceAddress = ServerIPAddress;\r
- IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;\r
- \r
- IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
- \r
- PacketSize += sizeof(IP_Header_t);\r
- \r
- /* Fill out the response Ethernet frame header */\r
- FrameOUTHeader->Source = ServerMACAddress;\r
- FrameOUTHeader->Destination = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};\r
- FrameOUTHeader->EtherType = SwapEndian_16(ETHERTYPE_IPV4);\r
-\r
- PacketSize += sizeof(Ethernet_Frame_Header_t);\r
-\r
- /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
- RNDISInterfaceInfo->FrameOUT.FrameLength = PacketSize;\r
- RNDISInterfaceInfo->FrameOUT.FrameInBuffer = true;\r
- \r
- ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;\r
- \r
- break;\r
- }\r
- }\r
-}\r
-\r
-/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are\r
- * processed.\r
- */\r
-void TCP_Init(void)\r
-{\r
- /* Initialize the port state table with all CLOSED entries */\r
- for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)\r
- PortStateTable[PTableEntry].State = TCP_Port_Closed;\r
-\r
- /* Initialize the connection table with all CLOSED entries */\r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed;\r
-}\r
-\r
-/** Sets the state and callback handler of the given port, specified in big endian to the given state.\r
- *\r
- * \param Port Port whose state and callback function to set, specified in big endian\r
- * \param State New state of the port, a value from the TCP_PortStates_t enum\r
- * \param Handler Application callback handler for the port\r
- *\r
- * \return Boolean true if the port state was set, false otherwise (no more space in the port state table)\r
- */\r
-bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*))\r
-{\r
- /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
- /* Check to see if the port entry is already in the port state table */\r
- for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
- {\r
- /* Find existing entry for the port in the table, update it if found */\r
- if (PortStateTable[PTableEntry].Port == Port)\r
- {\r
- PortStateTable[PTableEntry].State = State;\r
- PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
- return true;\r
- }\r
- }\r
-\r
- /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */\r
- if (State == TCP_Port_Open)\r
- {\r
- for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
- {\r
- /* Find a closed port entry in the table, change it to the given port and state */\r
- if (PortStateTable[PTableEntry].State == TCP_Port_Closed)\r
- {\r
- PortStateTable[PTableEntry].Port = Port;\r
- PortStateTable[PTableEntry].State = State;\r
- PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
- return true;\r
- }\r
- }\r
- \r
- /* Port not in table and no room to add it, return failure */\r
- return false;\r
- }\r
- else\r
- {\r
- /* Port not in table but trying to close it, so operation successful */\r
- return true;\r
- }\r
-}\r
-\r
-/** Retrieves the current state of a given TCP port, specified in big endian.\r
- *\r
- * \param Port TCP port whose state is to be retrieved, given in big-endian\r
- *\r
- * \return A value from the TCP_PortStates_t enum\r
- */\r
-uint8_t TCP_GetPortState(uint16_t Port)\r
-{\r
- /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
- for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
- {\r
- /* Find existing entry for the port in the table, return the port status if found */\r
- if (PortStateTable[PTableEntry].Port == Port)\r
- return PortStateTable[PTableEntry].State;\r
- }\r
- \r
- /* Port not in table, assume closed */\r
- return TCP_Port_Closed;\r
-}\r
-\r
-/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the\r
- * connection exists in the connection state table it is updated, otherwise it is created if possible.\r
- *\r
- * \param Port TCP port of the connection on the device, specified in big endian\r
- * \param RemoteAddress Remote protocol IP address of the connected device\r
- * \param RemotePort TCP port of the remote device in the connection, specified in big endian\r
- * \param State TCP connection state, a value from the TCP_ConnectionStates_t enum\r
- *\r
- * \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)\r
- */\r
-bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State)\r
-{\r
- /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- {\r
- /* Find port entry in the table */\r
- if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
- IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
- ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
- {\r
- ConnectionStateTable[CSTableEntry].State = State;\r
- return true;\r
- }\r
- }\r
- \r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- {\r
- /* Find empty entry in the table */\r
- if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)\r
- {\r
- ConnectionStateTable[CSTableEntry].Port = Port;\r
- ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress; \r
- ConnectionStateTable[CSTableEntry].RemotePort = RemotePort;\r
- ConnectionStateTable[CSTableEntry].State = State;\r
- return true;\r
- }\r
- }\r
- \r
- return false;\r
-}\r
-\r
-/** Retrieves the current state of a given TCP connection to a host.\r
- *\r
- * \param Port TCP port on the device in the connection, specified in big endian\r
- * \param RemoteAddress Remote protocol IP address of the connected host\r
- * \param RemotePort Remote TCP port of the connected host, specified in big endian\r
- *\r
- * \return A value from the TCP_ConnectionStates_t enum\r
- */\r
-uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
-{\r
- /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- {\r
- /* Find port entry in the table */\r
- if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
- IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
- ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
- \r
- {\r
- return ConnectionStateTable[CSTableEntry].State;\r
- }\r
- }\r
- \r
- return TCP_Connection_Closed;\r
-}\r
-\r
-/** Retrieves the connection info structure of a given connection to a host.\r
- *\r
- * \param Port TCP port on the device in the connection, specified in big endian\r
- * \param RemoteAddress Remote protocol IP address of the connected host\r
- * \param RemotePort Remote TCP port of the connected host, specified in big endian\r
- *\r
- * \return ConnectionInfo structure of the connection if found, NULL otherwise\r
- */\r
-TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
-{\r
- /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
- for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
- {\r
- /* Find port entry in the table */\r
- if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
- IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
- ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
- {\r
- return &ConnectionStateTable[CSTableEntry].Info;\r
- }\r
- }\r
- \r
- return NULL;\r
-}\r
-\r
-/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response\r
- * to the output Ethernet frame if one is created by a application handler.\r
- *\r
- * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
- * \param TCPHeaderInStart Pointer to the start of the incoming packet's TCP header\r
- * \param TCPHeaderOutStart Pointer to the start of the outgoing packet's TCP header\r
- *\r
- * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
- * response was generated, NO_PROCESS if the packet processing was deferred until the\r
- * next Ethernet packet handler iteration\r
- */\r
-int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart)\r
-{\r
- IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart;\r
- TCP_Header_t* TCPHeaderIN = (TCP_Header_t*)TCPHeaderInStart;\r
- TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;\r
-\r
- TCP_ConnectionInfo_t* ConnectionInfo;\r
- \r
- DecodeTCPHeader(TCPHeaderInStart);\r
-\r
- bool PacketResponse = false;\r
- \r
- /* Check if the destination port is open and allows incoming connections */\r
- if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)\r
- {\r
- /* Detect SYN from host to start a connection */\r
- if (TCPHeaderIN->Flags & TCP_FLAG_SYN)\r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen);\r
-\r
- /* Detect RST from host to abort existing connection */\r
- if (TCPHeaderIN->Flags & TCP_FLAG_RST)\r
- {\r
- TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); \r
- PacketResponse = true;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_Closed); \r
- }\r
- else\r
- {\r
- /* Process the incoming TCP packet based on the current connection state for the sender and port */\r
- switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort))\r
- {\r
- case TCP_Connection_Listen:\r
- if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
- {\r
- /* SYN connection when closed starts a connection with a peer */\r
-\r
- TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); \r
- PacketResponse = true;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
- TCP_Connection_SYNReceived);\r
- \r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
-\r
- ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
- ConnectionInfo->SequenceNumberOut = 0;\r
- ConnectionInfo->Buffer.InUse = false;\r
- }\r
- \r
- break;\r
- case TCP_Connection_SYNReceived:\r
- if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
- {\r
- /* ACK during the connection process completes the connection to a peer */\r
-\r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_Established);\r
-\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
- \r
- ConnectionInfo->SequenceNumberOut++;\r
- }\r
- \r
- break;\r
- case TCP_Connection_Established:\r
- if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
- {\r
- /* FIN ACK when connected to a peer starts the finalization process */\r
- \r
- TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK); \r
- PacketResponse = true;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);\r
-\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
-\r
- ConnectionInfo->SequenceNumberIn++;\r
- ConnectionInfo->SequenceNumberOut++;\r
- }\r
- else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH)))\r
- {\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
-\r
- /* Check if the buffer is currently in use either by a buffered data to send, or receive */ \r
- if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))\r
- { \r
- ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;\r
- ConnectionInfo->Buffer.InUse = true;\r
- ConnectionInfo->Buffer.Length = 0;\r
- }\r
- \r
- /* Check if the buffer has been claimed by us to read in data from the peer */\r
- if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&\r
- (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))\r
- {\r
- uint16_t IPOffset = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
- uint16_t TCPOffset = (TCPHeaderIN->DataOffset * sizeof(uint32_t));\r
- uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset);\r
-\r
- /* Copy the packet data into the buffer */\r
- memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length],\r
- &((uint8_t*)TCPHeaderInStart)[TCPOffset],\r
- DataLength);\r
-\r
- ConnectionInfo->SequenceNumberIn += DataLength;\r
- ConnectionInfo->Buffer.Length += DataLength;\r
- \r
- /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */\r
- if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))\r
- {\r
- ConnectionInfo->Buffer.InUse = false;\r
- ConnectionInfo->Buffer.Ready = true;\r
-\r
- TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
- PacketResponse = true;\r
- }\r
- }\r
- else\r
- {\r
- /* Buffer is currently in use by the application, defer processing of the incoming packet */\r
- return NO_PROCESS;\r
- }\r
- }\r
- \r
- break;\r
- case TCP_Connection_Closing:\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
-\r
- TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);\r
- PacketResponse = true;\r
- \r
- ConnectionInfo->Buffer.InUse = false;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);\r
-\r
- break;\r
- case TCP_Connection_FINWait1:\r
- if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
- {\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
-\r
- TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
- PacketResponse = true;\r
-\r
- ConnectionInfo->SequenceNumberIn++;\r
- ConnectionInfo->SequenceNumberOut++;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
- }\r
- else if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
- {\r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);\r
- }\r
- \r
- break;\r
- case TCP_Connection_FINWait2:\r
- if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
- {\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
-\r
- TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
- PacketResponse = true;\r
-\r
- ConnectionInfo->SequenceNumberIn++;\r
- ConnectionInfo->SequenceNumberOut++;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
- }\r
- \r
- break;\r
- case TCP_Connection_CloseWait:\r
- if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
- {\r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
- }\r
- \r
- break;\r
- }\r
- }\r
- }\r
- else\r
- {\r
- /* Port is not open, indicate via a RST/ACK response to the sender */\r
- TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); \r
- PacketResponse = true;\r
- }\r
- \r
- /* Check if we need to respond to the sent packet */\r
- if (PacketResponse)\r
- {\r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
- TCPHeaderIN->SourcePort);\r
-\r
- TCPHeaderOUT->SourcePort = TCPHeaderIN->DestinationPort;\r
- TCPHeaderOUT->DestinationPort = TCPHeaderIN->SourcePort;\r
- TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionInfo->SequenceNumberOut);\r
- TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);\r
- TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
- \r
- if (!(ConnectionInfo->Buffer.InUse))\r
- TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE);\r
- else\r
- TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length);\r
-\r
- TCPHeaderOUT->UrgentPointer = 0;\r
- TCPHeaderOUT->Checksum = 0;\r
- TCPHeaderOUT->Reserved = 0;\r
- \r
- TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,\r
- IPHeaderIN->SourceAddress, sizeof(TCP_Header_t)); \r
-\r
- return sizeof(TCP_Header_t); \r
- }\r
-\r
- return NO_RESPONSE;\r
-}\r
-\r
-/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,\r
- * complimented.\r
- *\r
- * \param TCPHeaderOutStart Pointer to the start of the packet's outgoing TCP header\r
- * \param SourceAddress Source protocol IP address of the outgoing IP header\r
- * \param DestinationAddress DestinationAddress protocol IP address of the outgoing IP header\r
- * \param TCPOutSize Size in bytes of the TCP data header and payload\r
- *\r
- * \return A 16-bit TCP checksum value\r
- */\r
-static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
- IP_Address_t DestinationAddress, uint16_t TCPOutSize)\r
-{\r
- uint32_t Checksum = 0;\r
- \r
- /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,\r
- complimented */\r
- \r
- Checksum += ((uint16_t*)&SourceAddress)[0];\r
- Checksum += ((uint16_t*)&SourceAddress)[1];\r
- Checksum += ((uint16_t*)&DestinationAddress)[0];\r
- Checksum += ((uint16_t*)&DestinationAddress)[1];\r
- Checksum += SwapEndian_16(PROTOCOL_TCP);\r
- Checksum += SwapEndian_16(TCPOutSize);\r
-\r
- for (uint8_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)\r
- Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];\r
- \r
- if (TCPOutSize & 0x01)\r
- Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);\r
- \r
- while (Checksum & 0xFFFF0000)\r
- Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
- \r
- return ~Checksum;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for TCP.c.\r
- */\r
-\r
-#ifndef _TCP_H_\r
-#define _TCP_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <stdbool.h>
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- #include "ProtocolDecoders.h"\r
- \r
- /* Macros: */\r
- /** Maximum number of TCP ports which can be open at the one time */\r
- #define MAX_OPEN_TCP_PORTS 1\r
-\r
- /** Maximum number of TCP connections which can be sustained at the one time */\r
- #define MAX_TCP_CONNECTIONS 1\r
-\r
- /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */\r
- #define TCP_WINDOW_SIZE 1024\r
- \r
- /** Port number for HTTP transmissions */\r
- #define TCP_PORT_HTTP SwapEndian_16(80)\r
- \r
- /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */\r
- #define TCP_PACKETDIR_IN false\r
-\r
- /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */\r
- #define TCP_PACKETDIR_OUT true\r
- \r
- /** Congestion Window Reduced TCP flag mask */\r
- #define TCP_FLAG_CWR (1 << 7)\r
-\r
- /** Explicit Congestion Notification TCP flag mask */\r
- #define TCP_FLAG_ECE (1 << 6)\r
-\r
- /** Urgent TCP flag mask */\r
- #define TCP_FLAG_URG (1 << 5)\r
-\r
- /** Data Acknowledge TCP flag mask */\r
- #define TCP_FLAG_ACK (1 << 4)\r
-\r
- /** Data Push TCP flag mask */\r
- #define TCP_FLAG_PSH (1 << 3)\r
-\r
- /** Reset TCP flag mask */\r
- #define TCP_FLAG_RST (1 << 2)\r
-\r
- /** Synchronize TCP flag mask */\r
- #define TCP_FLAG_SYN (1 << 1)\r
-\r
- /** Connection Finalize TCP flag mask */\r
- #define TCP_FLAG_FIN (1 << 0)\r
- \r
- /** Application macro: Determines if the given application buffer contains a packet received from the host\r
- *\r
- * \param Buffer Application buffer to check\r
- *\r
- * \return Boolean true if the buffer contains a packet from the host, false otherwise\r
- */\r
- #define TCP_APP_HAS_RECEIVED_PACKET(Buffer) (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN))\r
-\r
- /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.\r
- *\r
- * \param Buffer Application buffer to check\r
- *\r
- * \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise\r
- */\r
- #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \\r
- (Buffer->Direction == TCP_PACKETDIR_OUT))\r
-\r
- /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.\r
- *\r
- * \param Buffer Application buffer to check\r
- *\r
- * \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise\r
- */\r
- #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer) Buffer->InUse\r
-\r
- /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be\r
- * performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.\r
- *\r
- * \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().\r
- *\r
- * \param Buffer Application buffer to lock\r
- */\r
- #define TCP_APP_CAPTURE_BUFFER(Buffer) MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE\r
-\r
- /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.\r
- *\r
- * \param Buffer Application buffer to release\r
- */\r
- #define TCP_APP_RELEASE_BUFFER(Buffer) MACROS{ Buffer->InUse = false; }MACROE\r
-\r
- /** Application macro: Sends the contents of the given application buffer to the host.\r
- *\r
- * \param Buffer Application buffer to send\r
- * \param Len Length of data contained in the buffer\r
- */\r
- #define TCP_APP_SEND_BUFFER(Buffer, Len) MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE\r
-\r
- /** Application macro: Clears the application buffer, ready for a packet to be written to it.\r
- *\r
- * \param Buffer Application buffer to clear\r
- */\r
- #define TCP_APP_CLEAR_BUFFER(Buffer) MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE\r
- \r
- /** Application macro: Closes an open connection to a host.\r
- *\r
- * \param Connection Open TCP connection to close\r
- */\r
- #define TCP_APP_CLOSECONNECTION(Connection) MACROS{ Connection->State = TCP_Connection_Closing; }MACROE\r
-\r
- /* Enums: */\r
- /** Enum for possible TCP port states */\r
- enum TCP_PortStates_t\r
- {\r
- TCP_Port_Closed = 0, /**< TCP port closed, no connections to a host may be made on this port. */\r
- TCP_Port_Open = 1, /**< TCP port open, connections to a host may be made on this port. */\r
- };\r
- \r
- /** Enum for possible TCP connection states */\r
- enum TCP_ConnectionStates_t\r
- {\r
- TCP_Connection_Listen = 0, /**< Listening for a connection from a host */\r
- TCP_Connection_SYNSent = 1, /**< Unused */\r
- TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */\r
- TCP_Connection_Established = 3, /**< Connection established in both directions */\r
- TCP_Connection_FINWait1 = 4, /**< Closing, waiting for ACK */\r
- TCP_Connection_FINWait2 = 5, /**< Closing, waiting for FIN ACK */\r
- TCP_Connection_CloseWait = 6, /**< Closing, waiting for ACK */\r
- TCP_Connection_Closing = 7, /**< Unused */\r
- TCP_Connection_LastACK = 8, /**< Unused */\r
- TCP_Connection_TimeWait = 9, /**< Unused */\r
- TCP_Connection_Closed = 10, /**< Connection closed in both directions */ \r
- };\r
- \r
- /* Type Defines: */\r
- /** Type define for a TCP connection buffer structure, including size, data and direction */\r
- typedef struct\r
- {\r
- uint16_t Length; /**< Length of data in the TCP application buffer */\r
- uint8_t Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */\r
- bool Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN or TCP_PACKETDIR_OUT */\r
- bool Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates\r
- * buffer ready to be sent to the host\r
- */\r
- bool InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */\r
- } TCP_ConnectionBuffer_t;\r
-\r
- /** Type define for a TCP connection information structure */\r
- typedef struct\r
- {\r
- uint32_t SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ \r
- uint32_t SequenceNumberOut; /**< Current TCP sequence number for device-to-host */\r
- TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */\r
- } TCP_ConnectionInfo_t;\r
-\r
- /** Type define for a complete TCP connection state */\r
- typedef struct\r
- {\r
- uint16_t Port; /**< Connection port number on the device */\r
- uint16_t RemotePort; /**< Connection port number on the host */\r
- IP_Address_t RemoteAddress; /**< Connection protocol IP address of the host */\r
- TCP_ConnectionInfo_t Info; /**< Connection information, including application buffer */\r
- uint8_t State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */\r
- } TCP_ConnectionState_t;\r
-\r
- /** Type define for a TCP port state */\r
- typedef struct\r
- {\r
- uint16_t Port; /**< TCP port number on the device */\r
- uint8_t State; /**< Current port state, a value from the TCP_PortStates_t enum */\r
- void (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState,\r
- TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */\r
- } TCP_PortState_t;\r
-\r
- /** Type define for a TCP packet header */\r
- typedef struct\r
- {\r
- uint16_t SourcePort; /**< Source port of the TCP packet */\r
- uint16_t DestinationPort; /**< Destination port of the TCP packet */\r
- \r
- uint32_t SequenceNumber; /**< Data sequence number of the packet */\r
- uint32_t AcknowledgmentNumber; /**< Data acknowledgment number of the packet */\r
- \r
- unsigned char Reserved : 4; /**< Reserved, must be all 0 */\r
- unsigned char DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */\r
- uint8_t Flags; /**< TCP packet flags */\r
- uint16_t WindowSize; /**< Current data window size (bytes remaining in reception buffer) */\r
- \r
- uint16_t Checksum; /**< TCP checksum */\r
- uint16_t UrgentPointer; /**< Urgent data pointer */\r
- } TCP_Header_t;\r
- \r
- /* External Variables: */\r
- TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
-\r
- /* Function Prototypes: */\r
- void TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
- void TCP_Init(void);\r
- bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
- uint8_t TCP_GetPortState(uint16_t Port);\r
- bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
- uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
- TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
- int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);\r
-\r
- #if defined(INCLUDE_FROM_TCP_C)\r
- static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
- IP_Address_t DestinationAddress, uint16_t TCPOutSize);\r
- #endif\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low\r
- * reliability packets which are typically used to encapsulate streaming data.\r
- */\r
- \r
-#define INCLUDE_FROM_UDP_C\r
-#include "UDP.h"\r
-\r
-/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response\r
- * to the output Ethernet frame if a subprotocol handler has created a response packet.\r
- *\r
- * \param IPHeaderInStart Pointer to the start of the incoming packet's IP header\r
- * \param UDPHeaderInStart Pointer to the start of the incoming packet's UDP header\r
- * \param UDPHeaderOutStart Pointer to the start of the outgoing packet's UDP header\r
- *\r
- * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart)\r
-{\r
- UDP_Header_t* UDPHeaderIN = (UDP_Header_t*)UDPHeaderInStart;\r
- UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;\r
- \r
- int16_t RetSize = NO_RESPONSE;\r
- \r
- DecodeUDPHeader(UDPHeaderInStart);\r
- \r
- /* Check to see if the UDP packet is a DHCP packet */\r
- if (SwapEndian_16(UDPHeaderIN->DestinationPort) == UDP_PORT_DHCP_REQUEST)\r
- {\r
- RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart,\r
- &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)],\r
- &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);\r
- }\r
- \r
- /* Check to see if the protocol processing routine has filled out a response */\r
- if (RetSize > 0)\r
- {\r
- /* Fill out the response UDP packet header */\r
- UDPHeaderOUT->SourcePort = UDPHeaderIN->DestinationPort;\r
- UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort;\r
- UDPHeaderOUT->Checksum = 0;\r
- UDPHeaderOUT->Length = SwapEndian_16(sizeof(UDP_Header_t) + RetSize);\r
-\r
- /* Return the size of the response so far */\r
- return (sizeof(UDP_Header_t) + RetSize);\r
- }\r
- \r
- return NO_RESPONSE;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for IP.c.\r
- */\r
-\r
-#ifndef _UDP_H_\r
-#define _UDP_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- \r
- #include "EthernetProtocols.h"\r
- #include "Ethernet.h"\r
- #include "ProtocolDecoders.h"\r
- \r
- /* Macros: */\r
- /** Source UDP port for a DHCP request */\r
- #define UDP_PORT_DHCP_REQUEST 67\r
-\r
- /** Destination UDP port for a DHCP reply */\r
- #define UDP_PORT_DHCP_REPLY 68\r
- \r
- /* Type Defines: */\r
- /** Type define for a UDP packet header */\r
- typedef struct\r
- {\r
- uint16_t SourcePort; /**< Packet source port */\r
- uint16_t DestinationPort; /**< Packet destination port */\r
- uint16_t Length; /**< Total packet length, in bytes */\r
- uint16_t Checksum; /**< Optional UDP packet checksum */\r
- } UDP_Header_t;\r
- \r
- /* Function Prototypes: */\r
- int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This\r
- * application will serve up a static HTTP webpage when requested by the host.\r
- */\r
-\r
-#include "Webserver.h"\r
-\r
-/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the\r
- * given location, and gives extra connection information.\r
- */\r
-char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n"\r
- "Server: LUFA RNDIS\r\n"\r
- "Content-type: text/html\r\n"\r
- "Connection: close\r\n\r\n";\r
-\r
-/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically\r
- * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.\r
- */\r
-char PROGMEM HTTPPage[] = \r
- "<html>"\r
- " <head>"\r
- " <title>"\r
- " LUFA Webserver Demo"\r
- " </title>"\r
- " </head>"\r
- " <body>"\r
- " <h1>Hello from your USB AVR!</h1>"\r
- " <p>"\r
- " Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."\r
- " <br /><br />"\r
- " <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"\r
- " <hr />"\r
- " <i>LUFA Version: </i>" LUFA_VERSION_STRING\r
- " </p>"\r
- " </body>"\r
- "</html>";\r
-\r
-\r
-/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application\r
- * callback routine for packets sent to the HTTP protocol port.\r
- */\r
-void Webserver_Init(void)\r
-{\r
- /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */\r
- TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback);\r
-}\r
-\r
-/** Indicates if a given request equals the given HTTP command.\r
- *\r
- * \param RequestHeader HTTP request made by the host\r
- * \param Command HTTP command to compare the request to\r
- *\r
- * \return Boolean true if the command matches the request, false otherwise\r
- */\r
-static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)\r
-{\r
- /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */\r
- return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0);\r
-}\r
-\r
-/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request\r
- * has been made (if any), and serves up appropriate responses.\r
- *\r
- * \param ConnectionState Pointer to a TCP Connection State structure giving connection information\r
- * \param Buffer Pointer to the application's send/receive packet buffer\r
- */\r
-void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)\r
-{\r
- char* BufferDataStr = (char*)Buffer->Data;\r
- static uint8_t PageBlock = 0;\r
- \r
- /* Check to see if a packet has been received on the HTTP port from a remote host */\r
- if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))\r
- {\r
- if (IsHTTPCommand(Buffer->Data, "GET"))\r
- {\r
- PageBlock = 0;\r
-\r
- /* Copy the HTTP response header into the packet buffer */\r
- strcpy_P(BufferDataStr, HTTPHeader);\r
- \r
- /* Send the buffer contents to the host */\r
- TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
-\r
- /* Lock the buffer to Device->Host transmissions only while we send the page contents */\r
- TCP_APP_CAPTURE_BUFFER(Buffer);\r
- }\r
- else if (IsHTTPCommand(Buffer->Data, "HEAD"))\r
- {\r
- /* Copy the HTTP response header into the packet buffer */\r
- strcpy_P(BufferDataStr, HTTPHeader);\r
-\r
- /* Send the buffer contents to the host */\r
- TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
- }\r
- else if (IsHTTPCommand(Buffer->Data, "TRACE"))\r
- {\r
- /* Echo the host's query back to the host */\r
- TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);\r
- }\r
- else\r
- {\r
- /* Unknown request, just clear the buffer (drop the packet) */\r
- TCP_APP_CLEAR_BUFFER(Buffer);\r
- }\r
- }\r
- else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer))\r
- {\r
- uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);\r
- uint16_t Length;\r
- \r
- /* Determine the length of the loaded block */\r
- Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);\r
-\r
- /* Copy the next buffer sized block of the page to the packet buffer */\r
- strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);\r
- \r
- /* Send the buffer contents to the host */\r
- TCP_APP_SEND_BUFFER(Buffer, Length);\r
-\r
- /* Check to see if the entire page has been sent */\r
- if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE))\r
- {\r
- /* Unlock the buffer so that the host can fill it with future packets */\r
- TCP_APP_RELEASE_BUFFER(Buffer);\r
- \r
- /* Close the connection to the host */\r
- TCP_APP_CLOSECONNECTION(ConnectionState);\r
- }\r
- }\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Webserver.c.\r
- */\r
- \r
-#ifndef _WEBSERVER_H_\r
-#define _WEBSERVER_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/pgmspace.h>\r
- \r
- #include <LUFA/Version.h>\r
- \r
- #include "TCP.h"\r
- \r
- /* Macros: */\r
- /** Maximum size of a HTTP response per transmission */\r
- #define HTTP_REPLY_BLOCK_SIZE 128\r
- \r
- /* Function Prototypes: */\r
- void Webserver_Init(void);\r
- void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer);\r
-\r
-#endif\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>RNDISEthernet</ProjectName><Created>30-Sep-2008 14:17:05</Created><LastEdit>22-Jan-2009 17:52:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:17:05</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\LUFAWORK\Demos\RNDISEthernet\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</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>ARP.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Ethernet.c</SOURCEFILE><SOURCEFILE>ICMP.c</SOURCEFILE><SOURCEFILE>IP.c</SOURCEFILE><SOURCEFILE>ProtocolDecoders.c</SOURCEFILE><SOURCEFILE>RNDIS.c</SOURCEFILE><SOURCEFILE>RNDISEthernet.c</SOURCEFILE><SOURCEFILE>TCP.c</SOURCEFILE><SOURCEFILE>Webserver.c</SOURCEFILE><HEADERFILE>ARP.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Ethernet.h</HEADERFILE><HEADERFILE>EthernetProtocols.h</HEADERFILE><HEADERFILE>ICMP.h</HEADERFILE><HEADERFILE>IP.h</HEADERFILE><HEADERFILE>ProtocolDecoders.h</HEADERFILE><HEADERFILE>RNDIS.h</HEADERFILE><HEADERFILE>RNDISEthernet.h</HEADERFILE><HEADERFILE>TCP.h</HEADERFILE><HEADERFILE>Webserver.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>RNDISEthernet.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-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\EthernetProtocols.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the RNDISEthernet demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "RNDISEthernet.h"\r
-\r
-/** LUFA RNDIS Class driver interface configuration and state information. This structure is\r
- * passed to all RNDIS Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_RNDIS_t Ethernet_RNDIS_Interface =\r
- {\r
- .ControlInterfaceNumber = 0,\r
-\r
- .DataINEndpointNumber = CDC_TX_EPNUM,\r
- .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = CDC_RX_EPNUM,\r
- .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
- .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- \r
- .AdapterVendorDescription = "LUFA RNDIS Demo Adapter",\r
- .AdapterMACAddress = {ADAPTER_MAC_ADDRESS},\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
- \r
- TCP_Init();\r
- Webserver_Init();\r
-\r
- printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
-\r
- for (;;)\r
- {\r
- if (Ethernet_RNDIS_Interface.FrameIN.FrameInBuffer)\r
- {\r
- LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
- Ethernet_ProcessPacket(&Ethernet_RNDIS_Interface.FrameIN, &Ethernet_RNDIS_Interface.FrameOUT);\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
- }\r
-\r
- TCP_TCPTask(&Ethernet_RNDIS_Interface);\r
-\r
- USB_RNDIS_USBTask(&Ethernet_RNDIS_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- LEDs_Init();\r
- SerialStream_Init(9600, false);\r
- USB_Init();\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_RNDIS_ConfigureEndpoints(&Ethernet_RNDIS_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_RNDIS_ProcessControlPacket(&Ethernet_RNDIS_Interface);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for RNDISEthernet.c.\r
- */\r
- \r
-#ifndef _RNDISETHERNET_H_\r
-#define _RNDISETHERNET_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/pgmspace.h>\r
- #include <avr/power.h>\r
- #include <string.h>\r
- #include <stdio.h>\r
-\r
- #include "Descriptors.h"\r
-
- #include "Lib/Ethernet.h"\r
- #include "Lib/TCP.h"\r
- #include "Lib/ARP.h"\r
- #include "Lib/Webserver.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
- #define LEDMASK_USB_BUSY (LEDS_LED2)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
- \r
- void CALLBACK_USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
- \r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * Remote Network Driver Interface demonstration application.\r
- * This gives a simple reference application for implementing\r
- * a CDC RNDIS device acting as a simple network interface for\r
- * ethernet packet exchange. RNDIS is a proprietary Microsoft\r
- * standard; this demo will only work on Windows 2000 (manually\r
- * patched with the Microsoft RNDIS hotfix) and above (with no\r
- * manual patches), or on the latest Linux kernels.\r
- * \r
- * Before running, you will need to install the INF file that\r
- * is located in the RNDISEthernet project directory. This will\r
- * enable Windows to use its inbuilt RNDIS drivers, negating the\r
- * need for special Windows drivers for the device. To install,\r
- * right-click the .INF file and choose the Install option. If\r
- * Windows 2000 is used, the Microsoft INF file in the hotfix\r
- * will need to be altered to use the VID/PID of the demo and\r
- * then chosen instead of the LUFA RNDIS INF file when prompted.\r
- * \r
- * When enumerated, this demo will install as a new network\r
- * adapter which ethernet packets can be sent to and received\r
- * from. Running on top of the adapter is a very simple TCP/IP\r
- * stack with a HTTP webserver and TELNET host which can be\r
- * accessed through a web browser at IP address 10.0.0.2:80 or\r
- * through a TELNET client at 10.0.0.2:25. This device also supports\r
- * ping echos via the ICMP protocol.\r
- * \r
- * \note The TCP/IP stack in this demo has a number of limitations\r
- * and should serve as an example only - it is not fully featured nor\r
- * compliant to the TCP/IP specification. For complete projects, it is \r
- * recommended that it be replaced with an external open source TCP/IP\r
- * stack that is feature complete, such as the uIP stack.\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Communications Device Class (CDC)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>Microsoft RNDIS Specification</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_ETHERNET</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_ARP</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_IP</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_ICMP</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_TCP</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_UDP</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>NO_DECODE_DHCP</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td>\r
- * </tr>\r
- * </table>\r
- */
\ No newline at end of file
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = RNDISEthernet\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- Lib/Ethernet.c \\r
- Lib/ProtocolDecoders.c \\r
- Lib/ICMP.c \\r
- Lib/TCP.c \\r
- Lib/UDP.c \\r
- Lib/DHCP.c \\r
- Lib/ARP.c \\r
- Lib/IP.c \\r
- Lib/Webserver.c \\r
- $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
- $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/RNDIS.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-CDEFS += -DNO_DECODE_ETHERNET -DNO_DECODE_ARP -DNO_DECODE_ICMP -DNO_DECODE_IP -DNO_DECODE_TCP -DNO_DECODE_UDP -DNO_DECODE_DHCP\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x02,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x03EB,\r
- .ProductID = 0x204B,\r
- .ReleaseNumber = 0x0000,\r
- \r
- .ManufacturerStrIndex = 0x01,\r
- .ProductStrIndex = 0x02,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 2,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .CCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x02,\r
- .SubClass = 0x02,\r
- .Protocol = 0x01,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .CDC_Functional_IntHeader = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x00,\r
- \r
- .Data = {0x01, 0x10}\r
- },\r
-\r
- .CDC_Functional_CallManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x01,\r
- \r
- .Data = {0x03, 0x01}\r
- },\r
-\r
- .CDC_Functional_AbstractControlManagement = \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
- .SubType = 0x02,\r
- \r
- .Data = {0x06}\r
- },\r
- \r
- .CDC_Functional_Union= \r
- {\r
- .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
- .SubType = 0x06,\r
- \r
- .Data = {0x00, 0x01}\r
- },\r
-\r
- .ManagementEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
- .Attributes = EP_TYPE_INTERRUPT,\r
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- .PollingIntervalMS = 0xFF\r
- },\r
-\r
- .DCI_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 1,\r
- .AlternateSetting = 0,\r
- \r
- .TotalEndpoints = 2,\r
- \r
- .Class = 0x0A,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .DataOutEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS = 0x00\r
- },\r
- \r
- .DataInEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
- \r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
- .Attributes = EP_TYPE_BULK,\r
- .EndpointSize = CDC_TXRX_EPSIZE,\r
- .PollingIntervalMS= 0x00\r
- }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
- \r
- .UnicodeString = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- * Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
- .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
- \r
- .UnicodeString = L"LUFA USB-RS232 Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
- const uint8_t DescriptorNumber = (wValue & 0xFF);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- switch (DescriptorType)\r
- {\r
- case DTYPE_Device: \r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t);\r
- break;\r
- case DTYPE_Configuration: \r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t);\r
- break;\r
- case DTYPE_String: \r
- switch (DescriptorNumber)\r
- {\r
- case 0x00: \r
- Address = (void*)&LanguageString;\r
- Size = pgm_read_byte(&LanguageString.Header.Size);\r
- break;\r
- case 0x01: \r
- Address = (void*)&ManufacturerString;\r
- Size = pgm_read_byte(&ManufacturerString.Header.Size);\r
- break;\r
- case 0x02: \r
- Address = (void*)&ProductString;\r
- Size = pgm_read_byte(&ProductString.Header.Size);\r
- break;\r
- }\r
- \r
- break;\r
- }\r
- \r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for Descriptors.c.\r
- */\r
- \r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
- /* Includes: */\r
- #include <avr/pgmspace.h>\r
-\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
- /* Macros: */\r
- /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
- #define CDC_NOTIFICATION_EPNUM 2\r
-\r
- /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
- #define CDC_TX_EPNUM 3 \r
-\r
- /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
- #define CDC_RX_EPNUM 4 \r
-\r
- /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
- #define CDC_NOTIFICATION_EPSIZE 8\r
-\r
- /** Size in bytes of the CDC data IN and OUT endpoints. */\r
- #define CDC_TXRX_EPSIZE 16 \r
-\r
- /* Type Defines: */\r
- /** Type define for the device configuration descriptor structure. This must be defined in the\r
- * application code, as the configuration descriptor contains several sub-descriptors which\r
- * vary between devices, and which describe the device's usage to the host.\r
- */\r
- typedef struct\r
- {\r
- USB_Descriptor_Configuration_Header_t Config;\r
- USB_Descriptor_Interface_t CCI_Interface;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement;\r
- CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;\r
- USB_Descriptor_Endpoint_t ManagementEndpoint;\r
- USB_Descriptor_Interface_t DCI_Interface;\r
- USB_Descriptor_Endpoint_t DataOutEndpoint;\r
- USB_Descriptor_Endpoint_t DataInEndpoint;\r
- } USB_Descriptor_Configuration_t;\r
-\r
- /* Function Prototypes: */\r
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
+++ /dev/null
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-# TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-# TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME = "LUFA Library - USB to Serial Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF = "The $name class" \\r
- "The $name widget" \\r
- "The $name file" \\r
- is \\r
- provides \\r
- specifies \\r
- contains \\r
- represents \\r
- a \\r
- an \\r
- the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page. This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS = *.h \\r
- *.c \\r
- *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output. If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis. Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match. The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code. Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader. This is useful \r
-# if you want to understand what is going on. On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-# TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-# TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE = NO\r
+++ /dev/null
-; Windows LUFA USB to Serial Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version] \r
-Signature="$Windows NT$" \r
-Class=Ports\r
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
-Provider=%COMPANY% \r
-LayoutFile=layout.inf\r
-DriverVer=06/06/2006,1.0.0.0\r
-\r
-[Manufacturer] \r
-%MFGNAME% = ManufName\r
-\r
-[DestinationDirs] \r
-DefaultDestDir=12 \r
-\r
-[ManufName] \r
-%Modem3% = Modem3, USB\VID_03EB&PID_204B\r
-\r
-;------------------------------------------------------------------------------\r
-; Windows 2000/XP Sections\r
-;------------------------------------------------------------------------------\r
-\r
-[Modem3.nt]\r
-CopyFiles=USBModemCopyFileSection\r
-AddReg=Modem3.nt.AddReg \r
-\r
-[USBModemCopyFileSection]\r
-usbser.sys,,,0x20\r
-\r
-[Modem3.nt.AddReg] \r
-HKR,,DevLoader,,*ntkern \r
-HKR,,NTMPDriver,,usbser.sys \r
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
-\r
-[Modem3.nt.Services] \r
-AddService=usbser, 0x00000002, DriverService\r
-\r
-[DriverService] \r
-DisplayName=%SERVICE%\r
-ServiceType=1\r
-StartType=3\r
-ErrorControl=1\r
-ServiceBinary=%12%\usbser.sys \r
-\r
-;------------------------------------------------------------------------------\r
-; String Definitions\r
-;------------------------------------------------------------------------------\r
-\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-MFGNAME="Dean Camera"\r
-Modem3="USB Virtual Serial Port" \r
-SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-#include "RingBuff.h"\r
-\r
-void Buffer_Initialize(RingBuff_t* Buffer)\r
-{\r
- BUFF_ATOMIC_BLOCK\r
- {\r
- Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
- Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
- Buffer->Elements = 0;\r
- }\r
-}\r
-\r
-void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data)\r
-{\r
- BUFF_ATOMIC_BLOCK\r
- {\r
- #if defined(BUFF_DROPOLD)\r
- if (Buffer->Elements == BUFF_LENGTH)\r
- {\r
- Buffer->OutPtr++;\r
- \r
- if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
- Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
- }\r
- else\r
- {\r
- Buffer->Elements++;\r
- }\r
- #elif defined(BUFF_DROPNEW)\r
- if (Buffer->Elements == BUFF_LENGTH)\r
- return;\r
- \r
- Buffer->Elements++;\r
- #elif defined(BUFF_NODROPCHECK)\r
- Buffer->Elements++;\r
- #endif\r
- \r
- *(Buffer->InPtr) = Data;\r
- Buffer->InPtr++;\r
- \r
- if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH])\r
- Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
- }\r
-}\r
-\r
-RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer)\r
-{\r
- RingBuff_Data_t BuffData;\r
- \r
- BUFF_ATOMIC_BLOCK\r
- {\r
-#if defined(BUFF_EMPTYRETURNSZERO)\r
- if (!(Buffer->Elements))\r
- return 0;\r
-#elif !defined(BUFF_NOEMPTYCHECK)\r
- #error No empty buffer check behaviour specified.\r
-#endif\r
-\r
- BuffData = *(Buffer->OutPtr);\r
- \r
- Buffer->OutPtr++;\r
- Buffer->Elements--;\r
- \r
- if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
- Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
- }\r
- \r
- return BuffData;\r
-}\r
-\r
-#if defined(BUFF_USEPEEK)\r
-RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer)\r
-{\r
- RingBuff_Data_t BuffData;\r
-\r
- BUFF_ATOMIC_BLOCK\r
- {\r
-#if defined(BUFF_EMPTYRETURNSZERO)\r
- if (!(Buffer->Elements))\r
- return 0;\r
-#elif !defined(BUFF_NOEMPTYCHECK)\r
- #error No empty buffer check behaviour specified.\r
-#endif\r
-\r
- BuffData = *(Buffer->OutPtr);\r
- }\r
-\r
- return BuffData;\r
-}\r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/* Buffer Configuration: */\r
- /* Buffer length - select static size of created ring buffers: */\r
- #define BUFF_STATICSIZE 128 // Set to the static ring buffer size for all ring buffers (place size after define)\r
-\r
- /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */\r
- #define BUFF_VOLATILE // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access\r
-\r
- /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */\r
- #define BUFF_DROPOLD // Uncomment to cause full ring buffers to drop the oldest character to make space when full\r
- // #define BUFF_DROPNEW // Uncomment to cause full ring buffers to drop the new character when full\r
- // #define BUFF_NODROPCHECK // Uncomment to ignore full ring buffer checks - checking left to user!\r
-\r
- /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ring buffer: */\r
- //#define BUFF_EMPTYRETURNSZERO // Uncomment to return 0 when an empty ring buffer is read\r
- #define BUFF_NOEMPTYCHECK // Uncomment to disable checking of empty ring buffers - checking left to user!\r
- \r
- /* Buffer storage type - set the datatype for the stored data */\r
- #define BUFF_DATATYPE uint8_t // Change to the data type that is going to be stored into the buffer\r
- \r
- /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */\r
- //#define BUFF_USEPEEK\r
- \r
-#ifndef _RINGBUFF_H_\r
-#define _RINGBUFF_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/interrupt.h>\r
- #include <util/atomic.h>\r
- #include <limits.h>\r
-\r
- #include <LUFA/Common/Common.h>\r
-\r
- /* Defines and checks: */\r
- #if defined(BUFF_STATICSIZE)\r
- #define BUFF_LENGTH BUFF_STATICSIZE\r
- #else\r
- #error No buffer length specified!\r
- #endif\r
-\r
- #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK))\r
- #error No buffer drop mode specified.\r
- #endif\r
-\r
- #if !defined(BUFF_DATATYPE)\r
- #error Ringbuffer storage data type not specified.\r
- #endif\r
-\r
- #if defined(BUFF_VOLATILE)\r
- #define BUFF_MODE volatile\r
- #define BUFF_ATOMIC_BLOCK ATOMIC_BLOCK(ATOMIC_RESTORESTATE)\r
- #else\r
- #define BUFF_MODE\r
- #define BUFF_ATOMIC_BLOCK\r
- #endif\r
-\r
- #if (BUFF_STATICSIZE > LONG_MAX)\r
- #define RingBuff_Elements_t uint64_t\r
- #elif (BUFF_STATICSIZE > INT_MAX)\r
- #define RingBuff_Elements_t uint32_t\r
- #elif (BUFF_STATICSIZE > CHAR_MAX)\r
- #define RingBuff_Elements_t uint16_t\r
- #else\r
- #define RingBuff_Elements_t uint8_t\r
- #endif\r
- \r
- /* Type Defines: */\r
- typedef BUFF_DATATYPE RingBuff_Data_t;\r
-\r
- typedef BUFF_MODE struct\r
- {\r
- RingBuff_Data_t Buffer[BUFF_LENGTH];\r
- RingBuff_Data_t* InPtr;\r
- RingBuff_Data_t* OutPtr;\r
- RingBuff_Elements_t Elements;\r
- } RingBuff_t;\r
- \r
- /* Function Prototypes: */\r
- void Buffer_Initialize(RingBuff_t* Buff);\r
- void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data);\r
- RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer);\r
- #if defined(BUFF_USEPEEK)\r
- RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer);\r
- #endif\r
- \r
-#endif\r
+++ /dev/null
-<AVRStudio><MANAGEMENT><ProjectName>USBtoSerial</ProjectName><Created>30-Sep-2008 14:18:39</Created><LastEdit>30-Sep-2008 14:18:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:18:39</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\Demos\USBtoSerial\</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>Descriptors.c</SOURCEFILE><SOURCEFILE>RingBuff.c</SOURCEFILE><SOURCEFILE>USBtoSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>RingBuff.h</HEADERFILE><HEADERFILE>USBtoSerial.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>USBtoSerial.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>\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Main source file for the USBtoSerial demo. This file contains the main tasks of\r
- * the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "USBtoSerial.h"\r
-\r
-/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */\r
-RingBuff_t Rx_Buffer;\r
-\r
-/** Circular buffer to hold data from the serial port before it is sent to the host. */\r
-RingBuff_t Tx_Buffer;\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- * passed to all CDC Class driver functions, so that multiple instances of the same class\r
- * within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
- {\r
- .ControlInterfaceNumber = 0,\r
-\r
- .DataINEndpointNumber = CDC_TX_EPNUM,\r
- .DataINEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .DataOUTEndpointNumber = CDC_RX_EPNUM,\r
- .DataOUTEndpointSize = CDC_TXRX_EPSIZE,\r
-\r
- .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
- .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,\r
- };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- * setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
- SetupHardware();\r
- \r
- Buffer_Initialize(&Rx_Buffer);\r
- Buffer_Initialize(&Tx_Buffer);\r
-\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
- for (;;)\r
- {\r
- for (uint8_t DataBytesRem = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--)\r
- {\r
- if (!(BUFF_STATICSIZE - Rx_Buffer.Elements))\r
- break;\r
- \r
- Buffer_StoreElement(&Rx_Buffer, USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface));\r
- }\r
- \r
- if (Tx_Buffer.Elements)\r
- USB_CDC_SendByte(&VirtualSerial_CDC_Interface, Buffer_GetElement(&Rx_Buffer));\r
- \r
- if (Rx_Buffer.Elements)\r
- Serial_TxByte(Buffer_GetElement(&Rx_Buffer));\r
- \r
- USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
- USB_USBTask();\r
- }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
- /* Disable watchdog if enabled by bootloader/fuses */\r
- MCUSR &= ~(1 << WDRF);\r
- wdt_disable();\r
-\r
- /* Disable clock division */\r
- clock_prescale_set(clock_div_1);\r
-\r
- /* Hardware Initialization */\r
- Joystick_Init();\r
- LEDs_Init();\r
- USB_Init();\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
- if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
- LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
- USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
-}\r
-\r
-/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer\r
- * for later transmission to the host.\r
- */\r
-ISR(USART1_RX_vect, ISR_BLOCK)\r
-{\r
- if (USB_IsConnected)\r
- Buffer_StoreElement(&Tx_Buffer, UDR1);\r
-}\r
-\r
-/** Event handler for the CDC Class driver Line Encoding Changed event.\r
- *\r
- * \param CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced\r
- */\r
-void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)\r
-{\r
- uint8_t ConfigMask = 0;\r
-\r
- if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Odd)\r
- ConfigMask = ((1 << UPM11) | (1 << UPM10));\r
- else if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Even)\r
- ConfigMask = (1 << UPM11);\r
-\r
- if (CDCInterfaceInfo->LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits)\r
- ConfigMask |= (1 << USBS1);\r
-\r
- if (CDCInterfaceInfo->LineEncoding.DataBits == 6)\r
- ConfigMask |= (1 << UCSZ10);\r
- else if (CDCInterfaceInfo->LineEncoding.DataBits == 7)\r
- ConfigMask |= (1 << UCSZ11);\r
- else if (CDCInterfaceInfo->LineEncoding.DataBits == 8)\r
- ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10));\r
- \r
- UCSR1A = (1 << U2X1); \r
- UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));\r
- UCSR1C = ConfigMask; \r
- UBRR1 = SERIAL_2X_UBBRVAL((uint16_t)CDCInterfaceInfo->LineEncoding.BaudRateBPS);\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for USBtoSerial.c.\r
- */\r
-\r
-#ifndef _USB_SERIAL_H_\r
-#define _USB_SERIAL_H_\r
-\r
- /* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/wdt.h>\r
- #include <avr/interrupt.h>\r
- #include <avr/power.h>\r
-\r
- #include "Descriptors.h"\r
-\r
- #include "Lib/RingBuff.h"\r
-\r
- #include <LUFA/Version.h>\r
- #include <LUFA/Drivers/Board/LEDs.h>\r
- #include <LUFA/Drivers/Board/Joystick.h>\r
- #include <LUFA/Drivers/Peripheral/Serial.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
- /* Macros: */\r
- /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
- #define LEDMASK_USB_NOTREADY LEDS_LED1\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
- #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
-\r
- /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
- #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
-\r
- /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
- #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
- \r
- /* Function Prototypes: */\r
- void SetupHardware(void);\r
-\r
- void EVENT_USB_Connect(void);\r
- void EVENT_USB_Disconnect(void);\r
- void EVENT_USB_ConfigurationChanged(void);\r
- void EVENT_USB_UnhandledControlPacket(void);\r
- \r
- void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);\r
-\r
-#endif\r
+++ /dev/null
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
- \r
-/** \mainpage USB to Serial Converter Demo (via CDC-ACM class)\r
- *\r
- * \section SSec_Info USB Information:\r
- *\r
- * The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>USB Mode:</b></td>\r
- * <td>Device</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>USB Class:</b></td>\r
- * <td>Communications Device Class (CDC)</td>\r
- * </tr>\r
- * <tr> \r
- * <td><b>USB Subclass:</b></td>\r
- * <td>Abstract Control Model (ACM)</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Relevant Standards:</b></td>\r
- * <td>USBIF CDC Class Standard</td>\r
- * </tr>\r
- * <tr>\r
- * <td><b>Usable Speeds:</b></td>\r
- * <td>Full Speed Mode</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_Description Project Description: \r
- *\r
- * Communications Device Class demonstration application.\r
- * This gives a simple reference application for implementing\r
- * a USB to Serial converter using the CDC class. Sent and\r
- * received data on the serial port is communicated to the USB\r
- * host.\r
- * \r
- * After running this demo for the first time on a new computer,\r
- * you will need to supply the .INF file located in this demo\r
- * project's directory as the device's driver when running under\r
- * Windows. This will enable Windows to use its inbuilt CDC drivers,\r
- * negating the need for custom drivers for the device. Other\r
- * Operating Systems should automatically use their own inbuilt\r
- * CDC-ACM drivers.\r
- *\r
- * \section SSec_Options Project Options\r
- *\r
- * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>BUFF_STATICSIZE</td>\r
- * <td>RingBuff.h</td>\r
- * <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
- * </tr>\r
- * </table>\r
- */
\ No newline at end of file
+++ /dev/null
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-# >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-# Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-# have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-# have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-# (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-# (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-# DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-# with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-# bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-# This will define a symbol, F_CPU, in all source code files equal to the \r
-# processor frequency. You can then use this symbol in your source code to \r
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-# automatically to create a 32-bit value in your source code.\r
-# Typical values are:\r
-# F_CPU = 1000000\r
-# F_CPU = 1843200\r
-# F_CPU = 2000000\r
-# F_CPU = 3686400\r
-# F_CPU = 4000000\r
-# F_CPU = 7372800\r
-# F_CPU = 8000000\r
-# F_CPU = 11059200\r
-# F_CPU = 14745600\r
-# F_CPU = 16000000\r
-# F_CPU = 18432000\r
-# F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-# This will define a symbol, F_CLOCK, in all source code files equal to the \r
-# input clock frequency (before any prescaling is performed). This value may\r
-# differ from F_CPU if prescaling is used on the latter, and is required as the\r
-# raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-# at the end, this will be done automatically to create a 32-bit value in your\r
-# source code.\r
-#\r
-# If no clock division is performed on the input clock inside the AVR (via the\r
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = USBtoSerial\r
-\r
-\r
-# Object files directory\r
-# To put object files in current directory, use a dot (.), do NOT make\r
-# this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c \\r
- Descriptors.c \\r
- Lib/RingBuff.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-# Make them always end in a capital .S. Files ending in a lowercase .s\r
-# will not be considered source files but generated files (assembler\r
-# output from the compiler), and will be deleted upon "make clean"!\r
-# Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-# it will preserve the spelling of the filenames, and gcc itself does\r
-# care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-# 0 = turn off optimization. s = optimize for size.\r
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-# AVR Studio 4.10 requires dwarf-2.\r
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-# c89 = "ANSI" C\r
-# gnu89 = c89 plus GCC extensions\r
-# c99 = ISO C99 standard (not yet fully implemented)\r
-# gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-# -g*: generate debugging information\r
-# -O*: optimization level\r
-# -f...: tuning, see GCC manual and avr-libc documentation\r
-# -Wall...: warning level\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-# -Wa,...: tell GCC to pass this to the assembler.\r
-# -adhlns: create listing\r
-# -gstabs: have the assembler create line number information; note that\r
-# for use in COFF files, additional information about filenames\r
-# and function names needs to be present in the assembler source\r
-# files -- see avr-libc docs [FIXME: not yet described there]\r
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-# dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-# Each directory must be seperated by a space.\r
-# Use forward slashes for directory separators.\r
-# For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-# -Wl,...: tell GCC to pass this to linker.\r
-# -Map: create map file\r
-# --cref: add cross reference to map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level. Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-# just set to localhost unless doing some sort of crazy debugging when \r
-# avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = -------- end --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
- @echo\r
- @echo $(MSG_BEGIN)\r
-\r
-end:\r
- @echo $(MSG_END)\r
- @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
- 2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
- @echo\r
- @echo ------- Unhooked LUFA Events -------\r
- @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
- cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
- echo "(None)"\r
- @echo ------------------------------------\r
-\r
-checklibmode:\r
- @echo\r
- @echo ----------- Library Mode -----------\r
- @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
- | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
- || echo "No specific mode (both device and host mode allowable)."\r
- @echo ------------------------------------\r
-\r
-checkboard:\r
- @echo\r
- @echo ---------- Selected Board ----------\r
- @echo Selected board model is $(BOARD).\r
- @echo ------------------------------------\r
- \r
-# Display compiler version information.\r
-gccversion : \r
- @$(CC) --version\r
-\r
-\r
-\r
-# Program the device. \r
-program: $(TARGET).hex $(TARGET).eep\r
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
- batchisp -hardware usb -device $(MCU) -operation erase f\r
- batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
- dfu-programmer $(MCU) erase\r
- dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
- dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
- copy $(TARGET).eep $(TARGET)eep.hex\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
- batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
- batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
- dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
- dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-# define the reset signal, load the target file, connect to target, and set \r
-# a breakpoint at main().\r
-gdb-config: \r
- @$(REMOVE) $(GDBINIT_FILE)\r
- @echo define reset >> $(GDBINIT_FILE)\r
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
- @echo end >> $(GDBINIT_FILE)\r
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
- @echo load >> $(GDBINIT_FILE)\r
-endif\r
- @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
- @$(WINSHELL) /c pause\r
-\r
-else\r
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
- @echo\r
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
- @echo\r
- @echo $(MSG_FLASH) $@\r
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
- @echo\r
- @echo $(MSG_EEPROM) $@\r
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
- @echo\r
- @echo $(MSG_EXTENDED_LISTING) $@\r
- $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
- @echo\r
- @echo $(MSG_SYMBOL_TABLE) $@\r
- $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
- @echo\r
- @echo $(MSG_CREATING_LIBRARY) $@\r
- $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
- @echo\r
- @echo $(MSG_LINKING) $@\r
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
- @echo\r
- @echo $(MSG_COMPILING) $<\r
- $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
- @echo\r
- @echo $(MSG_COMPILING_CPP) $<\r
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
- $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
- @echo\r
- @echo $(MSG_ASSEMBLING) $<\r
- $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
- \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
- $(REMOVE) $(TARGET).hex\r
- \r
-clean_list:\r
- @echo $(MSG_CLEANING)\r
- $(REMOVE) $(TARGET).eep\r
- $(REMOVE) $(TARGET)eep.hex\r
- $(REMOVE) $(TARGET).cof\r
- $(REMOVE) $(TARGET).elf\r
- $(REMOVE) $(TARGET).map\r
- $(REMOVE) $(TARGET).sym\r
- $(REMOVE) $(TARGET).lss\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
- $(REMOVE) $(SRC:.c=.s)\r
- $(REMOVE) $(SRC:.c=.d)\r
- $(REMOVE) $(SRC:.c=.i)\r
- $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
- @echo Generating Project Documentation...\r
- @doxygen Doxygen.conf\r
- @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
- rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard \\r
-begin finish end sizebefore sizeafter gccversion \\r
-build elf hex eep lss sym coff extcoff clean \\r
-clean_list clean_binary program debug gdb-config \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
+++ /dev/null
-#
-# LUFA Library
-# Copyright (C) Dean Camera, 2009.
-#
-# dean [at] fourwalledcubicle [dot] com
-# www.fourwalledcubicle.com
-#
-
-# Makefile to build all the LUFA Device Demos. Call with "make all" to
-# rebuild all Device demos.
-
-# Projects 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 AudioInput clean
- make -C AudioInput all
-
- make -C AudioOutput clean
- make -C AudioOutput all
-
- make -C CDC clean
- make -C CDC all
-
- make -C DualCDC clean
- make -C DualCDC all
-
- make -C GenericHID clean
- make -C GenericHID all
-
- make -C Joystick clean
- make -C Joystick all
-
- make -C Keyboard clean
- make -C Keyboard all
-
- make -C KeyboardMouse clean
- make -C KeyboardMouse all
-
- make -C MassStorage clean
- make -C MassStorage all
-
- make -C MIDI clean
- make -C MIDI all
-
- make -C Mouse clean
- make -C Mouse all
-
- make -C RNDISEthernet clean
- make -C RNDISEthernet all
-
- make -C USBtoSerial clean
- make -C USBtoSerial all
-
-%:
- make -C AudioInput $@
- make -C AudioOutput $@
- make -C CDC $@
- make -C DualCDC $@
- make -C GenericHID $@
- make -C Joystick $@
- make -C Keyboard $@
- make -C KeyboardMouse $@
- make -C MassStorage $@
- make -C MIDI $@
- make -C Mouse $@
- make -C RNDISEthernet $@
- make -C USBtoSerial $@